จาก 4.1 การแสดงสตริงอักขระของ ข้อมูลจำเพาะร่าง NIST SP 800 38G Rev 1 ที่ถูกกล่าวถึงในความคิดเห็น:
อินพุตและเอาต์พุตข้อมูลไปยังการเข้ารหัส FF1 และ FF3-1 286 และฟังก์ชันการถอดรหัสต้องเป็นลำดับที่จำกัดของตัวเลข เช่น สตริงตัวเลข หากข้อมูลที่จะเข้ารหัสมีรูปแบบเป็นตัวอักษรที่ไม่ใช่ชุดของเลขฐาน ดังนั้นอักขระแต่ละตัวจะต้องแสดงด้วยตัวเลขที่แตกต่างกันเพื่อใช้ FF1 หรือ FF3-1
...
ทางเลือกและการใช้การโต้ตอบแบบหนึ่งต่อหนึ่งระหว่างตัวอักษรที่กำหนดกับชุดของตัวเลขฐานที่แสดงถึงตัวอักษรนั้นอยู่นอกขอบเขตของเอกสารฉบับนี้
สิ่งนี้ยังไม่ชัดเจน แต่โดยพื้นฐานแล้วคุณต้องแมปข้อมูลอินพุตของคุณกับช่วง [0, N) และกลับมาอีกครั้งระหว่างการเข้ารหัสทั้งสอง และ ถอดรหัส การแมปนี้อยู่นอกขอบเขต เนื่องจากแน่นอนว่าเป็นข้อกำหนดเฉพาะสำหรับการป้อนข้อมูล
หากข้อมูลของคุณประกอบด้วยหลายช่วง สิ่งต่างๆ ก็จะซับซ้อนขึ้นอีกเล็กน้อย โดยพื้นฐานแล้ว คุณจะต้องเรียงลำดับข้อมูลก่อน (โดยปกติจะเรียงจากซ้ายไปขวา) จากนั้นจึงกำหนดฐานสำหรับช่วงอินพุตแต่ละชุดที่แยกจากกัน จากนั้นค่าในช่วงจะถูกสร้างขึ้นโดยการคูณช่วงอินพุตกับฐานล่างสุด
ก่อนอื่นฉันจะแสดงให้คุณเห็นว่าสิ่งเหล่านี้เป็นอย่างไร $\text{เข้ารหัส}$ และ $\text{ถอดรหัส}$ ฟังก์ชั่นจะทำงาน:
สมมติว่าช่วงอินพุตเป็นตัวเลข - ไม่รวมศูนย์ - ตามด้วยอักขระใน ABC ตัวพิมพ์ใหญ่ เช่น [1-9][ก-ฮ]
. ฐานของตัวเลข - ไม่รวมศูนย์ - คือ $9$แน่นอนว่าฐานของตัวอักษรนั้น $26$.
ทีนี้มาลองคำนวณค่าของ 7Z
. หากคุณปฏิบัติตามกฎเหล่านี้ คุณค่าที่คุณได้รับคือ $6 \cdดอท 26 + 25 = 181$, ที่ไหน $6$ เป็นดัชนีของ 7
ใน $[1, 9]$, $26$ เป็นฐาน (จำนวนตัวอักษร) ใน ABC และ $25$ เป็นดัชนีของ Z
ใน ABC นั้น
ในการแมปกลับ คุณต้องดำเนินการก่อน $181 \bmod 26$ที่ควรให้คุณ $25$ อีกครั้งซึ่งให้คุณ Z
หลังจากยกเลิกการจัดทำดัชนี จากนั้นคุณแบ่ง: $\big\lceil 181 / 26 \big\rceil$และกลับไป $6$ ซึ่งเป็นดัชนีของ 7
ในช่วง $[1, 9]$.
ตอนนี้เราต้องรวมการเข้ารหัสและถอดรหัส:
ตอนนี้คุณสามารถเล่น FF1 หรือ FF3 กับผลลัพธ์ได้แล้ว $181$ และได้รับค่าที่แตกต่างกัน คุณสามารถใช้กฎเพื่อเข้ารหัสสิ่งนี้เพื่อเป็นตัวแทนที่คุณต้องการ
ดังนั้นบอกว่าคุณมี $\text{encode}(\text{"7Z"}) = 181$ และ $\text{enc}_k(181) = 26$แล้วสิ่งนี้จะให้คุณ
$\text{decode}(26) = "1A"$ ที่คุณสามารถจัดเก็บ จากนั้นคุณย้อนกลับดังนี้: $\text{decode}(\text{dec}_k(\text{encode}(\text{"1A"}))) = "7Z"$. พารามิเตอร์เข้ารหัสและถอดรหัสเฉพาะสำหรับ [1-9][ก-ฮ]
.
เคล็ดลับข้างต้นสามารถขยายไปยังรูปแบบใด ๆ ก็ตามที่มีช่วงชัดเจน และ - เมื่อเข้ารหัสอย่างถูกต้อง - จำเป็นต้องใช้การคูณและการบวกเท่านั้นสำหรับการเข้ารหัส และต้องใช้การหารกับเศษเหลือเท่านั้นสำหรับการถอดรหัสการเข้ารหัส/ถอดรหัสควรใช้เวลาน้อยกว่าหนึ่งไมโครวินาทีเมื่อใช้งานอย่างถูกต้อง (สำหรับขนาดอินพุตที่ค่อนข้างเล็ก ซึ่งมักใช้ FPE)