
DES加密算法的简单实现实验报告
苏州科技学院电子与信息工程学院实验报告实验一(实验)课程名称信息安全技术实验名称DES加密算法的简单实现实验报告一、实验室名称:电子学院213机房二、实验项目名称:DES加密算法的简单实现三、实验学时:2学时四、实验原理:DES的描述 DES是一种分组加密算法,他以64位为分组对数据加密。
64位一组的明文从算法的一端输入,64位的密文从另一端输出。
DES是一个对称算法:加密和解密用的是同一个算法(除密钥编排不同以外)。
密钥的长度为56位(密钥通常表示为64位的数,但每个第8位都用作奇偶检验,可以忽略)。
密钥可以是任意的56位数,且可以在任意的时候改变。
DES算法的入口参数有3个:Key,Data,Mode。
其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或解密的数据:Mode为DES的工作方式,有两种:加密或解密。
DES算法的工作过程:若Mode为加密,则用Key对数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;若Mode为解密,则用Key对密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。
DES算法详述 DES算64位的明文输入块变为64位的密文输出块,他所使用的密钥也是64位,DES对64位的明文分组进行操作。
通过一个初始置换,将明文分组分成左半部分和右半部分,各32位长。
然后进行16轮相同的
DES加密算法的简单实现实验报告
苏州科技学院电子与信息工程学院实验报告实验一(实验)课程名称信息安全技术实验名称DES加密算法的简单实现实验报告一、实验室名称:电子学院213机房二、实验项目名称:DES加密算法的简单实现三、实验学时:2学时四、实验原理:DES的描述 DES是一种分组加密算法,他以64位为分组对数据加密。
64位一组的明文从算法的一端输入,64位的密文从另一端输出。
DES是一个对称算法:加密和解密用的是同一个算法(除密钥编排不同以外)。
密钥的长度为56位(密钥通常表示为64位的数,但每个第8位都用作奇偶检验,可以忽略)。
密钥可以是任意的56位数,且可以在任意的时候改变。
DES算法的入口参数有3个:Key,Data,Mode。
其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或解密的数据:Mode为DES的工作方式,有两种:加密或解密。
DES算法的工作过程:若Mode为加密,则用Key对数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;若Mode为解密,则用Key对密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。
DES算法详述 DES算64位的明文输入块变为64位的密文输出块,他所使用的密钥也是64位,DES对64位的明文分组进行操作。
通过一个初始置换,将明文分组分成左半部分和右半部分,各32位长。
然后进行16轮相同的
目前的数字认证和加密算法的主要技术及其应用
没有加注释。
好好看看吧。
能实现功能
public class Test { public static void main(String[] args) { String encodeItem = \\\\\\\\_b2_U2ab__; String decodeItem = encode(encodeItem); System.out.println(encodeItem); System.out.println(decodeItem); System.out.println(decode(decodeItem)); } public static String encode(String encodeItem) { if (encodeItem == null || encodeItem.length() == 0) { return null; } StringBuilder result = new StringBuilder(); for (int i = 0; i < encodeItem.length(); i++) { char code = encodeItem.charAt(i); if (Character.isDigit(code)) { int codeValue = Character.digit(code, 10); if (codeValue <= 0) { result.append(code); } else { if ((i + 1) < encodeItem.length()) { for (int j = 0; j < (codeValue + 1); j++) { result.append(encodeItem.charAt(i + 1)); } } else { result.append(code); } } } else if (code == '_') { result.append(\\\\\\\\UL); } else { result.append(code); } if ((i + 1) != encodeItem.length()) { result.append('_'); } } return result.toString(); } public static String decode(String decodeItem) { if (decodeItem == null || decodeItem.length() == 0) { return null; } StringBuilder sbItem = new StringBuilder(decodeItem); for (int i = 0; i < sbItem.length(); i++) { if (sbItem.charAt(i) == '_' && (i + 2) < sbItem.length()) { while (sbItem.charAt(i + 1) == '_' && sbItem.charAt(i + 2) == '_') { sbItem.setCharAt(i + 1, ' '); i++; } } } StringBuilder result = new StringBuilder(); String[] code = sbItem.toString().split(_); for (int i = 0; i < code.length; i++) { String codeItem = code[i]; if (codeItem.length() == 1) { result.append(codeItem); } else if (\\\\\\\\UL.equals(codeItem)) { result.append(_); } else { result.append(codeItem.length() - 1); } } return result.toString(); }}



