BouncyCastle JCE实践(三)

?

密钥的产生<o:p></o:p>

对称密钥的产生<o:p></o:p>

??? 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥。这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统系统是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功能要求也没有那么高。IDEA加密标准由PGP(Pretty Good Privacy)系统使用。<o:p></o:p>

//首先要import javax.crypto.*;<o:p></o:p>

SecretKey key=null;<o:p></o:p>

???? try<o:p></o:p>

{<o:p></o:p>

//指定算法,这里为DES;如果想用Blowfish算法,则用 getInstance("Blowfish")<o:p></o:p>

//BouncyCastle基本上支持所有通用标准算法<o:p></o:p>

KeyGenerator keygen=KeyGenerator.getInstance("DES");<o:p></o:p>

//指定密钥长度,长度越高,加密强度越大<o:p></o:p>

keygen.init(56);<o:p></o:p>

//产生密钥<o:p></o:p>

key=keygen.generateKey();<o:p></o:p>

//构造输出文件,这里的目录是动态的,根据用户名称来构造目录<o:p></o:p>

???? ObjectOutputStream keyFile=new ObjectOutputStream(new FileOutputStream<o:p></o:p>

???????????? ("c:\\安全文件\\"+misClass.username+"\\对称\\对称密钥\\yhb.des"));<o:p></o:p>

???? keyFile.writeObject(key);<o:p></o:p>

???? keyFile.close();<o:p></o:p>

???? }<o:p></o:p>

???? catch(NoSuchAlgorithmException e5)<o:p></o:p>

{<o:p></o:p>

// generateKey()抛出的异常<o:p></o:p>

???? System.out.print("no such algorithm");<o:p></o:p>

???? System.exit(0);<o:p></o:p>

???? }<o:p></o:p>

???? catch(IOException e4)<o:p></o:p>

???? {<o:p></o:p>

???? System.out.print("error when generate the des key");<o:p></o:p>

???? System.exit(0);<o:p></o:p>

}<o:p></o:p>

非对称密钥的产生<o:p></o:p>

1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。<o:p></o:p>

与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。<o:p></o:p>

//密钥对<o:p></o:p>

??? KeyPair keys=null;<o:p></o:p>

??? try<o:p></o:p>

{<o:p></o:p>

//指定算法<o:p></o:p>

KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");<o:p></o:p>

//指定长度<o:p></o:p>

??? kpg.initialize(1024);<o:p></o:p>

keys=kpg.genKeyPair();<o:p></o:p>

//公钥<o:p></o:p>

byte[] key1=keys.getPublic().getEncoded();<o:p></o:p>

//私钥<o:p></o:p>

??? byte[] key2=keys.getPrivate().getEncoded();<o:p></o:p>

?<o:p></o:p>

??? //构造公钥文件并写入公钥<o:p></o:p>

FileOutputStream keyFile1=new FileOutputStream<o:p></o:p>

?????? ("c:\\安全文件\\"+misClass.username+"\\非对称\\本人公私钥\\yhb.public");<o:p></o:p>

???? keyFile1.write(key1);<o:p></o:p>

???? keyFile1.close();<o:p></o:p>

??? //构造私钥文件并写入私钥<o:p></o:p>

??? keyFile1=new FileOutputStream<o:p></o:p>

???? ("c:\\安全文件\\"+misClass.username+"\\非对称\\本人公私钥\\yhb.private");<o:p></o:p>

??? keyFile1.write(key2);<o:p></o:p>

??? keyFile1.close();<o:p></o:p>

??? }<o:p></o:p>

??? catch(NoSuchAlgorithmException e8)<o:p></o:p>

{<o:p></o:p>

//算法异常<o:p></o:p>

???? System.out.print("no such algorithm");<o:p></o:p>

???? System.exit(0);<o:p></o:p>

???? }<o:p></o:p>

???? catch(IOException e9)<o:p></o:p>

???? {<o:p></o:p>

???? System.out.print("error when generate the rsa key");<o:p></o:p>

???? System.exit(0);<o:p></o:p>

???? }

?

作者又名HongSoft,研究领域:1)基于工作流的BPM系统研究2)基于JAVA的信息安全技术.欢迎和大家讨论JAVA相关各方面问题 hongbosoftware@163.com<o:p></o:p>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值