编辑:
2014-11-04
加密过程如下:
1)接受两个输入:第一个明文块和初始向量,称为初始化向量(简称IV)。
2) 第一个明文块和初始化向量用异或运算组合。然后用一个密钥加密,产生第一个密文块。第一个密文块作为下一个明文块的反馈。
3) 将第三个明文块与第二个密文块用异或运算组合。然后用相同的密钥加密,产生第三个密文块。
4) 依此类推,直至加密结束。
初始向量作用如下, 因为如果两个密文的头8个字节相同,并且使用的密钥相同,则每条密文的开头8个字节也讲相同。对此,CBC使用一个8个字节的随机数作为初始向量来加密第一个分组,由于初始向量的随机性,这个问题迎刃而解。
以下是CBC加密方式的Java实现:
public void SEncCBC{trv{∥需加密的明文String s: “Hello1 23Hellol 23Hello1 23Hellol 23”:
//从文件key.dat中读取密钥FilelnputStream fl= new FilelnputStream(“key.dat”):
ObjectlnputStream ois=new ObjectlnputStream(f1):
Key k=(Key)ois.readObject《):
∥ 关闭流ois.close();∥ 生成初始向量byte[】rand=new byte[8];Random r=new Random();r.
nextBytes(rand);//f吏用随机数得到代表初始向量的IvParameterSpecIvParameterSpec iv=new IvParameterSpec(rand);//获取密码器,DESede代表所用的加密算法//CBC代表加密模式,PKCS5Padding为填充模式Cipher cp = Cipher.getlnstance (“DESede/CBC/PKCS5Padding”):
//初始化密码器,并执行加密cp.ink(Cipher.ENCRYPT— MODE,k,iv):
byte[】ptext=s.getBytes(“UTF-8”):
byte[】ctext=cp.doFinal(ptext);∥ 将初始向量和密文输入到SEncCBC.dat中FileOutputStream f2 = new FileOutputStream f“SEncCBC.dat”):
f2.write(rand);f2.write(ctext);f2.close();}catch(ExceptiOn e){e.prjntStackTrace《):
))加密使用到的初始向量和加密后的密文保存在文件SEncCBC.dat中。
基于CBC模式的解密过程如下:
(1) 通过文件输入流FileInputStream读取文件SEncCBC.
dat的开始8个字节,获取加密时所用的初始向量。
(2) 通过对象输人流0bjectInputStream读取加密时使用的密钥,该密钥被序列化后保存在key.dat中。
(3) 读取密文,首先通过available方法判断文件SEncCBCdat的剩余字节数,并创建相应大小的字节数组,然后使用文件输入流读取。
(4)使用Cipher.DECRY M0DE模式初始化密码器用doFinal进行解密。
调(5)将解密后的明文通过文件输出流FileOutl~,utStream保存到文件中4 实验结果与分析以下是两组实验,均以字符串作为实验明文,第一组中的明文可分为4个相同单元,每个单元由8个字节组成:第二组中的明文也由4个单元组成,其中第一单元和第三单元相同,第二单元和第四单元相同,每个单元也由8个字节组成。
5 结论
密码学和信息安全技术是信息科学与信息技术的重要分支,分组密码凭借其安全,高效,灵活的特点, 已经成为数据加密。消息认证和电子签名等应用领域的首选体制。
基于CBC保密模式的加密解密应用引入了随机的初始向量,隐蔽了明文的数据模式,增强了实际信息安全保护系统中密文的加密效果。具有较广泛的应用前景。
通过小编为大家分享的Java的CBC保密模式应用 ,希望对大家有所帮助。
标签:JAVA论文
精品学习网(51edu.com)在建设过程中引用了互联网上的一些信息资源并对有明确来源的信息注明了出处,版权归原作者及原网站所有,如果您对本站信息资源版权的归属问题存有异议,请您致信qinquan#51edu.com(将#换成@),我们会立即做出答复并及时解决。如果您认为本站有侵犯您权益的行为,请通知我们,我们一定根据实际情况及时处理。