栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java AES加密和解密

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java AES加密和解密

如果对于块密码,您将不使用

Cipher
包含填充方案的转换,则需要使明文中的字节数为该密码的块大小的整数倍。

因此,要么将纯文本填充到16字节的倍数(即AES块大小),要么在创建

Cipher
对象时指定填充方案。例如,您可以使用:

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

除非您有充分的理由不这样做,否则请使用JCE实现中已包含的填充方案。他们考虑了许多微妙和极端的情况,否则您将不得不自己意识到和应对这些情况。


好的,您的第二个问题是您

String
用来保存密文。

一般来说,

String s = new String(someBytes);byte[] retrievedBytes = s.getBytes();

不会

someBytes
retrievedBytes
是相同的。

如果您希望/必须将密文保存在中

String
,请先对密文字节进行base64编码,然后
String
从base64编码的字节中构造。然后,当您解密时,将从
getBytes()
中获取base64编码的字节
String
,然后对它们进行base64解码以获取真实的密文,然后对其进行解密。

出现此问题的原因是,大多数(全部?)字符编码都无法将任意字节映射到有效字符。因此,当您

String
从密文创建密码时,
String
构造函数(使用字符编码将字节转换为字符)本质上必须丢弃一些字节,因为它对它们毫无意义。因此,当您从字符串中获取字节时,它们与您放入字符串中的字节不同。

在Java(以及通常在现代编程中)中,除非绝对知道要处理ASCII,否则不能假定一个字符=一个字节。这就是为什么要从任意字节构建字符串时需要使用base64(或类似的东西)的原因。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507395.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号