欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

继续谈谈java中的Key

程序员文章站 2022-06-14 19:42:19
...

1.KeyGenerator的使用。

如下

static Key genKey(byte[] key){
		//获取AES算法的KeyGenerator实例对象
		KeyGenerator kg = KeyGenerator.getInstance("AES");
		//获取SecureRandom对象
		SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
		//设置种子
		random.setSeed(key);
		//初始化key生成器
		kg.init(128, random);
		//获取秘钥对象
		SecretKey secretKey = kg.generateKey();
		//获取秘钥字节数组
		byte[] enCodeFormat = secretKey.getEncoded();
		//返回使用AES秘钥加密的对象
		return new SecretKeySpec(enCodeFormat,"AES");
}

 

2 MessageDigest类使用,

消息摘要是采用任意大小的数据并输出固定长度散列值的安全单向散列函数

javadoc中支持的算法有:

<p> Every implementation of the Java platform is required to support
 * the following standard {@code MessageDigest} algorithms:
 * <ul>
 * <li>{@code MD5}</li>
 * <li>{@code SHA-1}</li>
 * <li>{@code SHA-256}</li>
 * </ul>

 但是java平台支持的摘要算法远远不止这些。

//MessageDigest对象初始化

MessageDigest md = MessageDigest.getInstance("MD5");

//摘要计算

byte[] result =  md.digest(byte[]  data)

 

 

SHA-256 加密返回的字节数组长度固定为32,一个字节长度是8位 ,32*8=256位,SHA256 算法的哈希值大小为 256 位。

 

以下两段代码的意思一样:

//转为两位的16进制
byte b = -5;
//将一个负数转化为256+b
Integer.toString(( b & 0xff) + 0x100, 16).subString(1)
//转为两位的16进制
String str;
String tempStr = (Integer.toHexString(b & 0xff));
if (tempStr.length() == 1) {
    str = str + "0" + tempStr;
}
else {
    str = str + tempStr;
}