DES 什么是DES加密算法 DES加密算法,为对称加密算法中的一种。70年代初由IBM研发,后1977年被美国国家标准局采纳为数据加密标准,即DES全称的由来:Data Encryption StandardDES,也是是目前最为流行的加密算法之一 DES加密算法的原理 DES还是一种分组加密算法,该算法每次处理固定长度的数据段,称之为分组。DES分组的大小是64位,如果加密的数据长度不是64位的倍数,可以按照某种具体的规则来填充位。 DES是以64比特的明文为一个单位来进行加密的,超过64比特的数据,要求按固定的64比特的大小分组,分组有很多模式。DES使用的密钥长度为64比特,但由于每隔7个比特设置一个奇偶校验位,因此其密钥长度实际为56比特(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)。奇偶校验为最简单的错误检测码,即根据一组二进制代码中1的个数是奇数或偶数来检测错误。 分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。 整个加密过程 第一步:将初始密钥(64位,实际使用54位)转换成16个子密钥(48位),将明文(明文需要一组一组的来,一组64位) 第二步:将分组好的明文又拆分成2组32位配上密钥进行加密 第三步:进行16轮的替代或交换的方式进行加密,并且一轮使用一个子密钥 第四步:得到密文(一组一组的得到,一组为64位) DES处理和检测校验位的代码 private String getDesKeyKcv(byte[] key){ //开始处理奇偶校验位 如果前7位 “1”的数量为奇数,则校验位为0;如果“1”的数量为偶数,则校验位为“1”。 //既 包括了校验位,“1”的数量必须为奇数 int FE = 0xFE; //1111 1110 for(int i=0;i>> 1; if((temp & 1) == 1){ oneCount++; //移过来的最后1位是1则oneCount++ } } if(oneCount %2 == 0) { //统计最后的oneCount,即1的个数是否是奇数 key[i] = IByte.intToByte((int) key[i] | 1); //1的个数是偶数 则 | 1 最后一位变成1 }else{ key[i] = IByte.intToByte((int) key[i] & FE); //1的个数是奇数 则 & FE 最后一位变成0 } } return IDES.encrypt3DES2HexString( IByte.hexStringToBytes("0000000000000000"), key, "DESede/ECB/NoPadding", null); }