4.本题根据密码表将密文解密为明文。为了提高数据的安全性,可将数字数据(如银行账号等)加密成字母密文保存,在使用时再解密还原成数值(例如:密文“agKxKaKa”用本程序可解密为20151212)。
本题解密方法可预先约定好一组字母密码存放在元组code密码表中,code[0]~code[9]分别表示数字“0”~“9”对应的密码;输入欲解密的密文(Ciphertext)并回车(输入字母“q”将推出程序),根据密码表转换成明文(Plaintext,码表中无法转换的代码用“?”代替,最后显示在标签上。)运行结果如下:
图片说明
密码表如下:code=('g','K','a','P','W','x','E','Q','f','t')
请在IDLE环境编写程序实现以上功能。
package com.yysd;
import java.util.Scanner;
public class testmima {
private final static String[] code = {"g","K","a","P","W","x","E","Q","f","t"};
private final static String[] num = {"0","1","2","3","4","5","6","7","8","9"};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入明文:");
String codem = sc.nextLine();
System.out.println(testmima.szTransZm(codem));
Scanner scc = new Scanner(System.in);
System.out.println("请输入密文:");
String numm = scc.nextLine();
System.out.println(testmima.zmTransSz(numm));
}
/**
* 加密
* @param numm
* @return
*/
public static String szTransZm(String numm) {
String numtocode = "";
for(int i = 0;i<numm.length();i++){
System.out.println(numm.substring(i, i+1));
numtocode += code[Integer.parseInt(numm.substring(i, i+1))];
}
return numtocode;
}
/**
* 解密
* @param codem
* @return
*/
public static String zmTransSz(String codem) {
String numm = "";
for(int i = 0; i<codem.length();i++) {
System.out.println(codem.substring(i,i+1));
int k = -1;
for(int j =0;j<code.length;j++) {
if(codem.substring(i,i+1).equals(code[j])) {
k = j;
}
}
if(k == -1) {
numm += "?";
}else {
numm += k;
}
}
return numm;
}
}
我用java 写的
while True:
st = input('密文:')
if st == 'q':
break
code = ['g', 'K', 'a', 'P', 'W', 'x', 'E', 'Q', 'f', 't']
result = ''
for i in range(len(st)):
bo = False
for j in range(len(code)):
if st[i] == code[j]:
result = result + str(j)
bo = True
if bo == False:
result = result + '?'
print(result)
我随便写了下,你看一下吧