移位替換密碼

移位替換密碼技術:

(加法密碼)


加密變換:Ek(Ai)=Aj, j=(i+k)(mod n) ,0<k<n
解密變換:Dk(Aj)=Ai, i=(j-k)(mod n)=(j+(n-k))(mod n)
加密與解密是可逆的,D(k)=E(n-k)
移位替換密碼技術密鑰爲k,唯一地確定了明文空間到密文空間的映射,密鑰空間元素個數爲n-1


凱撒密碼:
一種最爲古老的對稱加密體制,通過把字母移動一定的位數來實現加密和解密。

明文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。


例如,當偏移量是3的時候,所有的字母A將被替換成D,B變成E,以此類推X將變成A,Y變成B,Z變成C。
k=3
明文字母  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
數組下標  0 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


密文字母  d e f g h i j k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z  a  b  c
數組下標  3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 0  1  2


測試例子如下:


import java.util.ArrayList;
import java.util.Scanner;
public class 移位密碼技術 {
public static int En(int i,int k,int n){
return (i+k)%n;
}
public static int Dn(int j,int k,int n){
return (j+(n-k))%n;
}
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("第一行輸入密碼錶總數n\n第二行輸入各明文字符\n第三行輸入待加密明文");
int n=scan.nextInt();
char CharArrays[]=new char[n];
CharArrays=scan.next().toCharArray();
scan.nextLine();
String normalStr=scan.nextLine();
String splitStrs[]=normalStr.split(" ");
System.out.println("請選擇密鑰k,0=<k<n");
int k=scan.nextInt();
while(k>=n){
System.out.println("只能選擇 0=<k<n 的密鑰值!請重新選擇");
k=scan.nextInt();
}
ArrayList<Character> templist=new ArrayList<>();
System.out.println("加密後如下:");
for (int i = 0; i < splitStrs.length; i++) {
char normalChars[]=splitStrs[i].toCharArray();
for (int j = 0; j < normalChars.length; j++) {
int t=En((normalChars[j]-'a'), k, n);
normalChars[j]=CharArrays[t];//加密
System.out.print(normalChars[j]);
t=Dn((normalChars[j]-'a'), k, n);
normalChars[j]=CharArrays[t];//解密
templist.add(normalChars[j]);
}
System.out.print(" ");
templist.add(' ');
}
System.out.println("\n解密後如下:");
for(Character o:templist){
System.out.print(o);
}
}
}
運行結果如下:


第一行輸入密碼錶總數n
第二行輸入各密文字符
第三行輸入待加密明文
26
abcdefghijklmnopqrstuvwxyz
a man liberal in his views
請選擇密鑰k,0=<k<n
3
加密後如下:
d pdq olehudo lq klv ylhzv 
解密後如下:
a man liberal in his views 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章