ประการแรก การเข้ารหัสตัวอักษรเดี่ยวอาจเป็นแนวคิดของการแทนที่ตัวอักษรเดี่ยวหรือการเข้ารหัสโดยใช้เทคนิคนี้เท่านั้น นั่นหมายความว่า Ceaser เป็นการแทนที่ด้วยตัวอักษรเดี่ยว เพราะมันใช้แนวคิดนี้ ความแตกต่างของการแทนที่ตัวอักษรเดี่ยว "จริง" คือการสร้างคีย์ไม่ได้สุ่มอย่างสมบูรณ์
ส่วนตัวฉันจะไม่กำหนด $\mathcal{M}, \mathcal{C}, \mathcal{K}$ แบบที่คุณทำเพราะฉันคิดว่ายังไม่ชัดเจนพอ คำจำกัดความทางคณิตศาสตร์อาจดีกว่า:
- $\mathcal{M} = \{ a,b,c,...,z\}^*$ และ $\mathcal{C} = \{ a,b,c,...,z\}^*$
ฉันยังต้องการหลีกเลี่ยง $\mathcal{M} = \mathcal{C}$ เพราะอาจถูกต้องตามหลักคณิตศาสตร์ แต่อาจส่อให้ผู้อ่านเข้าใจผิดได้ ฉันเลือก $\{ a,b,c,...,z\}^*$เพราะโดยปกติพื้นที่ข้อความคือ $\{0,1\}^*$ และฉันก็ปรับให้เข้ากับบริบทที่กำหนด
ตอนนี้ฉันคิดว่าคุณไม่สามารถกำหนดได้ $\mathcal{K} = S_{26}$. คืออะไร $S$? ฉันจะกำหนด $\mathcal{K} = \{f_k\mid k \in \{a,...,z\}\}$, ที่ไหน $f_k$ เป็นฟังก์ชันการแทนที่แบบ bijective
การเข้ารหัสและถอดรหัสดูดี ฉันจะทำอย่างนั้นสำหรับข้อความ $m = m_1, ... m_n \in \mathcal{M}$:
- $Enc_k(ม)$: $c_i = f_{m_i}(m_i)\forall i \in \{1,...,n\}$
- $Dec_k(ค)$: $m_i = f^{-1}_{c_i}(c_i) \forall i \in \{1,...,n\}$
Generation สามารถกำหนดเป็น:
- $เจน$: เลือกการแทนที่แบบสุ่ม $f_k$ สำหรับทุกๆ $k \in \{a,...,z\}$, ดังนั้น $f^{-1}_k$ เป็นฟังก์ชันผกผันแบบสองนัย