【发布时间】:2009-08-18 19:22:58
【问题描述】:
我想存储一个包装在 String 对象中的字节数组。这是场景
- 用户输入密码。
- 该密码的字节是使用 getBytes() String 方法获取的。
- 它们的字节是使用 java 的 crypo 包加密的。
- 然后使用构造函数 new String(bytes[]) 将这些字节转换为字符串
- 该字符串已存储,或以其他方式传递(未更改)
- 获得该字符串的字节,它们与编码字节不同。
这里有一段代码描述了我在说什么。
String s = "test123";
byte[] a = s.getBytes();
byte[] b = env.encrypt(a);
String t = new String(b);
byte[] c = t.getBytes();
byte[] d = env.decrypt(c);
其中 env.encrypt() 和 env.decrypt() 进行加密和解密。我遇到的问题是 b 数组的长度为 8,而 c 数组的长度为 16。我认为它们是相等的。这里发生了什么?我尝试修改代码如下
String s = "test123";
Charset charset = Charset.getDefaultCharset();
byte[] a = s.getBytes(charset);
byte[] b = env.encrypt(a);
String t = new String(b, charset);
byte[] c = t.getBytes(charset);
byte[] d = env.decrypt(c);
但这并没有帮助。
有什么想法吗?
【问题讨论】:
-
您的代码示例中的
env是什么?