Score:0

ฟังก์ชัน textâtext ทางเดียว

ธง jp

ฉันต้องการวิธีจับคู่ข้อความที่พิมพ์ได้กับข้อความที่พิมพ์ได้อื่นๆ เช่น.:

เอียน บอยด์ â เคซีพี ซบาส

สังเกตข้อกำหนดที่สำคัญบางประการ:

  • ตัวพิมพ์ใหญ่เป็นตัวพิมพ์ใหญ่ในเอาต์พุต
  • ตัวพิมพ์เล็กในการป้อนข้อมูลเป็นตัวพิมพ์เล็กในการป้อนข้อมูล
  • เว้นวรรค (และอย่างอื่นนอก A-Z0-9) ไว้ตามลำพัง

ข้อกำหนดเพิ่มเติมก็คือว่า กำหนดนั่นคืออินพุตเดียวกันจะให้เอาต์พุตเดียวกันเสมอ:

  • เอียน บอยด์ â เคซีพี เอ็กซ์บาส
  • เอียน บอยด์ â เคซีพี เอ็กซ์บาส
  • เอียน บอยด์ â เคซีพี เอ็กซ์บาส

ข้อกำหนดอื่น ๆ ขยายขอบเขตออกไป และฉันไม่รู้ว่าจะเรียกมันว่าอะไร ยกเว้นการพูดว่าคำที่มีคำนำหน้าทั่วไปต้องมีผลลัพธ์เดียวกันสำหรับคำนำหน้าทั่วไปเดียวกัน:

  • ฉัน â เค
  • เอีย â Kc
  • เอียน â กพ
  • เอียน â กพ
  • เอียน บี â เคซีพี เอ็กซ์
  • เอียน โบ â เคซีพี เอ็กซ์บี
  • เอียน บอย â เคซีพี เอ็กซ์บา
  • เอียน บอยด์ â เคซีพี เอ็กซ์บัป

ทางออกของฉัน

ฉันสร้างโซลูชันสำหรับข้อกำหนดทางเทคนิคเหล่านี้เมื่อ 15 ปีก่อน แต่ฉันกำลังพยายามทบทวนบางสิ่งอีกครั้ง "ดีกว่า".

วิธีแก้ปัญหาของฉันคือ "การเข้ารหัสซีซาร์แบบสตรีมมิ่งพร้อมการผูกมัด".

สร้างการทดแทนซีซาร์อย่างง่าย:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
F H U D I R Y E K C Z N S A B G J P V O W T L M Q X

แต่แทนที่จะเป็นการทดแทนอย่างง่าย:

  • เอียน บอยด์ â Fks Hbqd

ฉันใช้การผูกมัดแทน:

สถานะก่อนหน้า ผลรวมอักขระปัจจุบัน (mod) เอาต์พุตอักขระถัดไป
-------------- ----------------- ---------- --------- ----- --------------------
0 I (9) 9 K K
9 a (1) 10 c Kc
10 น. (14) 24 น. Kcp

24 B (2) 26 X Kcp X
26 o (15) 15 b Kcp Xb
15 ปี (25) 14 ปี Kcp Xba
14 d (4) 18 ม. Kcp Xbap

วิธีแก้ปัญหาที่ดีกว่าด้วยการแฮช?

ค่าเหล่านี้ไม่ใช่สิ่งที่ฉันต้องการ (หรือต้องการ) "ถอดรหัส"และการใช้รหัสซีซาร์แสดงถึงความสามารถในการถอดรหัส (ซึ่งเราทุกคนรู้ว่าไม่ใช่เรื่องยาก)

ตามแนวคิดแล้วฉันต้องการ "ฟังก์ชันทางเดียว": สิ่งที่:

  • แปลงอินพุต
  • ไปสู่ผลลัพธ์ที่คาดเดาไม่ได้
  • กำหนด

ฉันคิดว่า: จะเกิดอะไรขึ้นถ้าฉันใช้อัลกอริทึมแฮช เพิ่มตัวอักษรทีละตัว และรับค่าปัจจุบัน "สถานะ"และแปลงไดเจสต์บางส่วนนั้นเป็นอักขระ (ตัวพิมพ์ใหญ่/ตัวพิมพ์เล็ก/หลักตามความเหมาะสมเพื่อให้ตรงกับอินพุต):

   สตริง FrobTheGrobber (อินพุตสตริง)
   {
      // การพิสูจน์รหัสเทียมแนวคิดที่จัดการเฉพาะตัวพิมพ์ใหญ่
      แฮชอัลกอริทึมแฮช = ใหม่ SHA256();
      แฮช AddBytes (SECRET_KEY);

      สตริง res = "";

      สำหรับ Char ch ในการป้อนข้อมูล
      {
         hash.Add(ch);
         int charCode = (hash.Hash[0] % 26) + 1; // ใช้ไบต์แรก mod 26 เพื่อรับค่าจาก 0..25
         res += Char(Ord('A') + charCode;
      }            
   }

ฉันรู้; คุณเกลียด ความต้องการ.

ทุกคนสามารถสิ่งที่ดีกว่า?

DannyNiu avatar
vu flag
การป้อนรหัสซีซาร์และทำให้มันทำงานเหมือนฟังก์ชันการบีบอัดเดวีส์-เมเยอร์
DannyNiu avatar
vu flag
คุณสมบัติ prefix-idempotence ทำให้ *ไม่* ย้อนกลับการแมปได้ยาก
fgrieu avatar
ng flag
คุณสมบัติคำนำหน้าบอกเป็นนัยว่า ถ้า `I` â `K` แล้ว `i` â `k` หรือเป็นไปได้ไหมว่า `i` â `z` ว่าถ้า `เอียน â Kcp ` แล้ว `เอียนเอียน` â `Kcp Kcp` หรือว่า `เอียนเอียน` â `Kcp Zar`?
jp flag
@fgrieu เพื่อความง่ายมันเป็น *"ตัวพิมพ์เล็กและใหญ่"* นั่นคือ `i` และ `I` ทั้งคู่จับคู่กับ `k` และ `K` โซลูชันทั้งหมดยังรวมถึง `0`-`9` ในรหัสซีซาร์ด้วย วิธีนี้จะทำให้สิ่งต่างๆ เช่น หมายเลขโทรศัพท์จับคู่กับสิ่งที่ดูเหมือนหมายเลขโทรศัพท์ ( `905-867-5309` → `619-112-8408`) และฉันยังสามารถจับคู่ตัวพิมพ์เล็กแยกจากตัวพิมพ์ใหญ่ ทั้งสองวิธี: ไม่สำคัญ หากมีใครสามารถคิดวิธีแก้ปัญหาสำหรับ `A`-`Z` ได้ ฉันสามารถขยายไปยังอักขระอื่น ๆ ได้
SAI Peregrinus avatar
si flag
คุณจะจัดการกับ i และ ι ซึ่งทั้งคู่จับคู่กับ I อย่างไร แค่ไม่สนใจตุรกี? การไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่มักจะเป็นความคิดที่น่ากลัวเสมอ มันมักจะสูญเสีย
jp flag
@SAIPeregrinus คำถามไม่ต้องการรายละเอียดเหล่านั้น สำหรับจุดประสงค์ของคำถามนี้ คุณจะต้องแก้ไขการจัดการ `A-Z` เท่านั้น ตอบคำถามนั้นแล้วฉันจะจัดการส่วนที่เหลือเอง ส่วนที่เหลือเป็นเรื่องเล็กน้อยที่จะจัดการและไม่เกี่ยวข้องกับคำถามของฉันเลย ถ้ามันช่วยคุณได้ ให้แสร้งทำเป็นว่าระบบต้นทางใช้โค้ดเพจ 5 บิต ซึ่งกำหนดเฉพาะอักขระ `A`-`Z` เมื่อพูดทั้งหมดแล้ว คุณก็รู้ **แน่นอน** ว่าฉันจะจัดการกับการทดสอบไก่งวงอย่างไร - แต่นั่นไม่ใช่ส่วนหนึ่งของคำถามของฉัน เพราะมันไม่สำคัญสำหรับคำถาม และไม่ใช่คำถามที่ฉันถาม
jjj avatar
cn flag
jjj
ด้วยข้อกำหนดคำนำหน้านั้นไม่สามารถเป็นแบบทางเดียวได้เนื่องจากสามารถสร้างอักขระใหม่สำหรับอักขระได้อย่างง่ายดาย
Ievgeni avatar
cn flag
ฉันไม่เข้าใจข้อกำหนดด้านความปลอดภัยข้อใด
Score:1
ธง ng

ปัญหาเกี่ยวกับวิธีแก้ปัญหาดั้งเดิมของคำถามคือตารางการแทนที่เหมือนกันในแต่ละดัชนี และส่วนที่ดีกว่าของคีย์ จึงสามารถพิจารณาได้จากตัวอย่าง ปัญหาเกี่ยวกับวิธีแก้ปัญหาที่ "ดีกว่า" คือการรู้ข้อมูลเบื้องต้น ฉัน เข้ารหัสเป็น เคเรารู้เบื้องต้น เข้ารหัสเป็น , อักษรย่อ เข้ารหัสเป็น ฯลฯ..

ฉันเสนอสิ่งต่อไปนี้พร้อมแฮชอย่างน้อย 256 บิต $H$ เช่น SHA-256 และคีย์ $K$:

  • ชุด $y=\mathtt{\text{â0â}}$
  • สำหรับตัวละครแต่ละตัว $x$ เพื่อเข้ารหัสหรือถอดรหัส
    • อนุญาต $b=0$
    • ถ้า $x$ เป็นตัวเลขให้ $b=10$ และปล่อยให้ $c=\mathtt{\text{â0â}}$
    • ถ้า $x$ เป็นตัวพิมพ์ใหญ่ให้ $b=26$ และปล่อยให้ $c=\mathtt{\text{âAâ}}$
    • ถ้า $x$ เป็นตัวพิมพ์เล็กให้ $b=26$ และปล่อยให้ $c=\mathtt{\text{âaâ}}$
    • ถ้า $b\ne0$
      • ชุด $K=H(K\mathbin\|\operatorname{ตัวพิมพ์ใหญ่}(y)\mathbin\|b)$
      • เตรียมการเปลี่ยนแปลง $p$ ของ $ข$ องค์ประกอบที่คีย์โดยค่าปัจจุบันของ $K$; และต่อสิ่งนี้:
        • ตั้งค่าจำนวนเต็ม $r=K$ (ต่อการประชุม big-endian)
        • สำหรับ $i=0$ ถึง $b-1$
          • ชุด $j=r\bmod(i+1)$, แล้ว $r=\lชั้น r/(i+1)\rชั้น$
          • ชุด $p[i]=i$
          • ชุด $p[i]=p[j]$
          • ชุด $p[j]=i$
      • ถ้าเข้ารหัส
        • ชุด $y=x$
        • ชุด $x=p[x-c]+c$
      • มิฉะนั้น
        • ชุด $x=p^{-1}[x-c]+c$
        • ชุด $y=x$
    • เอาต์พุต $x$

และสิ่งนี้ให้ผลลัพธ์:

ป้อนข้อความ มีสัญญาณรบกวน
ฉัน
เอีย เพื่อน
เอียน เพื่อน
เอียน เพื่อน
เอียน บี บีเอฟดี เค
เอียน โบ บีเอฟดี เคเอฟ
เอียน บอย บีเอฟดีเคเอฟที
เอียน บอยด์ บีเอฟดี เคเอฟทีวี
เอียน บอยด์ บีเอฟดี เคเอฟทีวี
เอียน บอยด์ 2 บีเอฟดี เคเอฟทีวี 2
เอียน บอยด์ 20 บีเอฟดี เคเอฟทีวี 25
เอียน บอยด์ 201 บีเอฟดี เคเอฟทีวี 257
เอียน บอยด์ 2017 Bfd Kftv 2571

ลองออนไลน์! ในไพธอน

เดอะ $K=H(K\mathbin\|\operatorname{ตัวพิมพ์ใหญ่}(y)\mathbin\|b)$ ขั้นตอนเตรียมคีย์ใหม่ที่ขึ้นอยู่กับอักขระก่อนหน้า บนอักขระก่อนหน้า (ทำให้เป็นมาตรฐานเป็นตัวพิมพ์ใหญ่ เนื่องจากไม่ชัดเจนว่าการใช้อักษรตัวพิมพ์ใหญ่อาจมีผลต่ออักขระถัดไป) และในกรณีที่อักขระปัจจุบันเป็นตัวเลขหรือไม่ (เนื่องจากกฎ อนุญาตและเราต้องการพึ่งพาเท่าที่พวกเขาอนุญาต) ในแต่ละขั้นตอน $256-\log_2(26!)>167.6$ สถานะบางส่วนยังไม่ทราบสำหรับผู้โจมตีแม้ในการโจมตีแบบข้อความธรรมดาที่เลือก เราสร้างการเรียงสับเปลี่ยนในขนาดที่เหมาะสมตามอักขระปัจจุบัน ในทิศทางที่เหมาะสมสำหรับการเข้ารหัสหรือถอดรหัส

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา