置换加密算法2.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
置换加密算法2剖析

置换密码算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。置换密码有时又称为换位密码。 矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给定的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。例如,明文为attack begins at five,密钥为cipher,将明文按照每行6个字母的形式排在矩阵中,形成如下形式: 根据密钥cipher中各个字母在字母表中出现的先后顺序,给定一个置换: 由密钥cipher通过getTheMatrix方法得到f矩阵。 根据上面的置换,将原有居住中的字母按照第1列、第4裂、第5裂、第3裂、第2列、第6列的顺序排列,则有下面的形式: 这里经过了一点处理就是当输入的字母数不是密钥长度的整数倍时,在输入的备加密字符串加上几个“#”来完成补全,然后参加到加密的过程中去,从而得到如下的密文: a siteaetb vci #agt#knf# 其解密过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由 密钥给出的矩阵置换产生新的矩阵,从而恢复明文。 本实验中也使用了上述的测试用例,主要经过两次依据矩阵的变换,都是使用矩阵f中的下面一行中的数值所在列来替换上面一行数值表示的列的值,从而来改变起序列、完成加密。 解密中用到groupedSource[i][j]=temp[i][secretMatrix[secretMatrix[j]]]; 来完成将原来经过矩阵转变来的字符序列逆转,从而得到起加密前的矩阵。 【代码部分】 package Practice1; import java.util.Arrays; import java.util.Scanner; public class ReplaceDemo { private String sourceString = attack begins at five; private String keyString = cipher; private int[] secretMatrix; private char groupedSource[][]; private void getSource(){//Get the source String Scanner scan = new Scanner(System.in); System.out.print(Please input the string what you want to encrypt:\t); sourceString = scan.nextLine(); System.out.print(Please input the key string for you:\t); keyString = scan.next(); } public ReplaceDemo(){//constructor for this class getSource(); } private void groupSourceString(){//make groups for sourceString according by the keyString int sourceLen = sourceString.length(); int keyLen = keyString.length(); groupedSource = new char[sourceLen/keyLen+1][keyLen]; if (sourceLen%keyLen!=0){ for (int i = 0;i (keyLen - sourceLen%keyLen);i++){ sourceString += #; } } sourceLen = sourceString.length(); for(int i = 6,j=0;i = sourceLen;i+=keyLen,j++){ groupedSource[j] = sourceString.substring(i-keyLen, i).toCharArray(); } } private void getTheMatrix(){//get the Matrix for the encrypt char[] temp01 = keyString.toCharArray(); secretMatrix = new int[keyString.length()]; Arrays.sort(temp01); for (int i = 0;i keyString.length();i++){ for (int j = 0;jkeyString.length(

文档评论(0)

1520520 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档