TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如:明文字母a、b、c、d ,用D、E、F、G做对应替换后形成密文。
替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替代密码等。下面我们介绍一种典型的单表替代密码,恺撒(caesar)密码,又叫循环移位密码。它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第k个字母替代。它的加密过程可以表示为下面的函数:
E(m)=(m+k) mod n
其中:m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;E(m)为密文字母在字母表中对应的位置数。
例如,对于明文字母H,其在字母表中的位置数为8,设k=4,则按照上式计算出来的密文为L:
E(8) = (m+k) mod n = (8+4) mod 26 = 12 = L
- [/code]
-
- package cn.hdu.edu.encrypt;
-
-
- /*
- * 古典密码算法之 替代算法
- *
- */
- public class Replace {
-
- //当加密或者解密成功时返回CRYPT_OK,失败时返回CRYPT_ERROR
- private final static int CRYPT_OK = 1;
- private final static int CRYPT_ERROR = 0;
- //设定一共有26个可用字母 字母a的编码是97
- private final static int totalLetter = 26;
- private final static int key = 3;
-
- /*
- * @param initCode 没有加密前的字符串
- * @CRYPT_OK 加密成功
- * @CRYPT_ERROR 加密失败
- */
- public static int encrypt(String initCode)throws Exception{
- //用来输出加密后的字符
- StringBuilder sb = new StringBuilder();
- for(int i = 0; i < initCode.length(); i++ ){
- int initCodeVal = initCode.charAt(i ) - 96;
- int targetCodeVal = (initCodeVal + key ) % totalLetter;
- if(targetCodeVal == 0) targetCodeVal = 26;
- char targetCode = (char)(targetCodeVal +96);
- sb.append(targetCode );
- }
- //以下就是加密后的字符
- String targetCode = sb.toString();
- System.out.println(targetCode);
- return CRYPT_OK;
- }
-
- /*
- * @param targetCode 加密前的字符串
- * @CRYPT_OK 解密成功
- * @CRYPT_ERROR 解密失败
- */
- public static int decrypt(String targetCode)throws Exception{
- //用来输出解密后的字符
- StringBuilder sb = new StringBuilder();
- for(int i = 0; i < targetCode.length(); i++ ){
- int targetCodeVal = targetCode.charAt(i ) - 96;
-
- //如果已经来到了字母表的开头 给他还回去
- if(targetCodeVal <= key) targetCodeVal += 26;
-
- int initCodeVal = targetCodeVal - key;
- char initCode = (char)(initCodeVal + 96);
- sb.append(initCode );
- }
- //以下就是解密后的字符
- String initCode = sb.toString();
- System.out.println(initCode);
- return CRYPT_OK;
- }
-
-
-
-
- }
-
- [url=http://nileader.blog.51cto.com/1381108/297609]本文出自 51CTO.COM技术博客[/url]
- [code]
复制代码
源码下载:http://file.javaxxz.com/2014/11/9/000428015.zip |
|