Java密码学

来源:互联网 发布:ubuntu devel 编辑:程序博客网 时间:2024/05/20 04:10

代码

//基于password的对称密钥String password="";SecretKeySpec secretKeySpec=new SecretKeySpec(password.getBytes(),"");/参数二为算法, 源码规定不可为null,但是可以为无
//普通对称密钥,不能根据password得到对应密钥,需要store到文件里,才能再使用KeyGenerator keygenerator  = KeyGenerator.getInstance("DES");SecretKey secretKey = keygenerator.generateKey();

这里注意, mac初始化用的是MD5算法, 和key所用的算法没有强制要求一致. key没有算法也可以(但是不安全).


理解

javax.crypto.spec.SecretKeySpec

SecretKeySpec继承了KeySpec接口和SecretKey

KeySpec

A (transparent) specification of the key material that constitutes a cryptographic key.

SecretKey接口有: (从SecretKey的父接口文档Key可知其作用)

这里两者的区别 :

KeySpec好比网上有各种协议 ,ftp啊, http啊等等, 但是它们的目的就是为了发送内容, 而keyspec就是这些协议, 而key|secretkey就是我们真正想操作的内容


SecretKey有以下方法

  1. getAlgorithm 算法名称 (getAlgorithm提供密钥的参考)
  2. getEncoded (丢个传送门, 编码格式用于传输时用)
  3. getFormat 规范格式 (Encoded是返回内容, format是返回该内容格式的名字)

getEncoded就是刚刚比喻到的协议的名称. 而keyspec则是协议的具体细节.

SecretKeySpec继承了两个类, 说明它既带辅助的功能有能提供密钥的内容信息, SecretKeySpec提到, 它是简易版的钥匙工厂.

我们就来看看工厂类

DESKeySpec desKey = new DESKeySpec(password.getBytes());SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");SecretKey securekey = keyFactory.generateSecret(desKey);

这样看来, 真得代码量多了不少.

PS : KeyFactory , 我们平时就用来生成公钥和私钥, 并不会使用来生成对称密钥

原创粉丝点击