信息安全_替代加密算法_Caesar(凯…

    【题目描述】替代密码的原理是使用替代法进行加密,就是将明文由其它的字母、数字或符合所代替后形成密文。这里每个明文字母对应的密文字母可能是一个,也可能是多个。接收者对密文进行逆向替换即可得到明文。

    本次实验中采用单表密码算法的一种典型算法——凯撒密码,又称循环移位密码。

 

    其中,m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥; 为密文字母在字母表中对应的位置数。

   【代码部分】

 package Practice1;

 import java.util.Scanner;

 public class CaesarDemo {

 private String initStr;
 public String targetStr;
 private String alphabet  = "abcdefghijklmnopqrstuvwxyz";
 private int k = 0;
 public CaesarDemo(String...string){
  if(string.length==2){
   this.alphabet = string[0];
  }
  this.initStr = string[1];
  this.k = Integer.parseInt(string[2]);
 }
 private int isContain(char ch){
  for (int i = 0;i < alphabet.length();i++){
   if (ch!=alphabet.toCharArray()[i])
    continue;
   else
    return i;
  }
  return -1;
 }
 public String Encrypt(){
  char[] alphabetChar = this.alphabet.toCharArray();
  char[] initChar = initStr.toCharArray();
  for (int i = 0;i<initStr.length();i++){
   if (isContain(initChar[i])==-1){
    return targetStr = "你输入的字符不在字母表中,请检查输入!";
   }
   initChar[i] = alphabetChar[(isContain(initChar[i]) + k)%alphabetChar.length];
  }
  targetStr = new String(initChar);
  return targetStr;
 }
 public String reverseEncrypt(){
  char[] alphabetChar = this.alphabet.toCharArray();
  char[] initChar = initStr.toCharArray();
  for (int i = 0;i<initStr.length();i++){
   if (isContain(initChar[i])==-1){
    return targetStr = "你输入的字符不在字母表中,请检查输入!";
   }
   initChar[i] = alphabetChar[(isContain(initChar[i]) - k)%alphabetChar.length];
  }
  targetStr = new String(initChar);
  return targetStr;
 }
 
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  String initStr = null;
  String alphabet = null;
  CaesarDemo caesar = null;
  int k = 0;
  Scanner scan = new Scanner(System.in);
  //加密过程
  System.out.println("加密过程:");
  System.out.println("请输入自定义字母表(默认为正常小写英语字母序列,采用默认形式请输入“-0”):");
  alphabet = scan.next();
  System.out.println("请输入想要加密的字符串:");
  initStr = scan.next();
  System.out.println("请输入想要加密的密钥_k:");
  k = scan.nextInt();
  if(alphabet!="-0")
   caesar = new CaesarDemo(alphabet,initStr,k+"");
  else
   caesar = new CaesarDemo(initStr,k+"");
  System.out.println("完成加密得到密文为:"+caesar.Encrypt());
  //解密过程
  System.out.println("解密过程:");
  System.out.println("请输入自定义字母表(默认为正常小写英语字母序列,采用默认形式请输入“-0”):");
  alphabet = scan.next();
  System.out.println("请输入想要解密的字符串:");
  initStr = scan.next();
  System.out.println("请输入想要解密的密钥_k:");
  k = scan.nextInt();
  if(alphabet!="-0")
   caesar = new CaesarDemo(alphabet,initStr,k+"");
  else
   caesar = new CaesarDemo(initStr,k+"");
  System.out.println("完成加密得到密文为:"+caesar.reverseEncrypt());
 }
}
【测试用例】输入字母表:abcdefg  输入欲加密字符串:cd  输入密钥:2

            得到测试结果为:ef

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值