您的位置 首页 java

JAVA加密及密钥相关核心API说明之对称性加密详解

上一篇文章说明了秘钥生成器与秘钥工厂的功能与区别,本篇内容带大家做一个对称性加密的详细理解

步骤1,使用对称性加密生成器,生成java内部格式的秘钥(非秘钥规范格式,既不透明秘钥格式)。透明介质/透明格式的意思是遵循特定标准,大家都知道,可以按标准解析使用的意思,不准确,但是可以先这么理解。

KeyGenerator keyGenerator = KeyGenerator.getInstance(“DESede”);

keyGenerator.init(new SecureRandom());

SecretKey secretKey= keyGenerator.generateKey();

步骤2,使用不透明密码格式的secretKey秘钥编码值,初始化一个特定秘钥规范的秘钥描述对象,并通过SecretKeyFactory秘钥工厂产生特定格式的秘钥(理解为转为为特定格式的秘钥也行)。

DESedeKeySpec deSedeKeySpec=new DESedeKeySpec(secretKey.getEncoded());

SecretKeyFactory secretKeyFactory=SecretKeyFactory.getInstance(“DESede”);

Key key= secretKeyFactory.generateSecret(deSedeKeySpec);

步骤3,可以将特定格式的秘钥 编码 值进行保存,用于传输给别人使用,使用方读取编码后按特定格式的秘钥描述对象重构秘钥对象.Hex是commons-codec-1.10. jar 包里提供的工具类

String keyCode= Hex.encodeHexString(key.getEncoded());

OutputStream outputStream=new FileOutputStream(new File(“D:\\keyCode.txt”));

outputStream.write(keyencode.get byte s());

outputStream. close ();

步骤4、用密码类使用秘钥来加密内容

Cipher cipher=Cipher.getInstance(“DESede/ECB/PKCS5Padding”);

cipher.init(Cipher.ENCRYPT_MODE, key);//特别说明,这个key就是秘钥,如果这个秘钥是特定规范格式的秘钥,则解密时也许使用特定秘钥格式的秘钥进行解密,比如:如果直接用SecretKey secretKey= keyGenerator.generateKey();的秘钥,解密也需要此秘钥,就不能是使用SecretKeyFactory转换过的秘钥了。此处例子使用转换过的秘钥,既Key key= secretKeyFactory.generateSecret(deSedeKeySpec);这个秘钥。//ENCRYPT_MODE加密模式

String secretContent= Hex.encodeHexString(cipher.doFinal(“我是内容”.getBytes()));//加密的内容怎么存储或传输就不说了

步骤5、读取秘钥文件D:\\keyCode.txt,取出秘钥编码(文件输入流的过程省略),使用秘钥编码重构秘钥对象,进行解密

String keystr = “keyCode.txt里的内容”;

String secretContent=”加密后的内容,怎么得到,自己悟”;

byte[] keybyte= Hex.decodeHex(keystr .toCharArray());

DESedeKeySpec deSedeKeySpec=new DESedeKeySpec(keybyte);

SecretKeyFactory secretKeyFactory=SecretKeyFactory.getInstance(“DESede”);

Key key= secretKeyFactory.generateSecret(deSedeKeySpec);//得到特定格式规范的秘钥,这里的透明密码格式是DES-EDE (“triple-DES”)

//使用密码工具类用秘钥进行解密

Cipher cipher=Cipher.getInstance(“DESede/ECB/PKCS5Padding”);

cipher.init(Cipher.DECRYPT_MODE, key);//DECRYPT_MODE解密模式

String rs= new String(cipher.doFinal(secretContent));

备注:如果是不想用透明规范,也可以直接使用SecretKey非透明秘钥和secretKey.getEncoded非透明秘钥编码,不过,这在异构系统和非同一系统内,以及不同项目之间的通信加解密,需要约定好,不如使用透明规范更便于对接。

文章来源:智云一二三科技

文章标题:JAVA加密及密钥相关核心API说明之对称性加密详解

文章地址:https://www.zhihuclub.com/184758.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图