【发布时间】:2015-11-10 06:59:21
【问题描述】:
对于给定的byte[],总是一样的,我想得到对应的String。 byte[] result 始终具有相同的值。
但是返回的字符串永远不会相同,每次我启动我的应用程序时,结果都会改变。
byte[] results = cipher.doFinal(text.getBytes("UTF-8"));
String result = Base64.encodeBase64String(results);
我尝试了其他几种方法来获取我的字符串,例如String result = new String(results, "UTF-8");,Array,...但每次都不同。
这是在密码加密之后发生的。完整代码如下:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5padding");
byte[] keyBuf= new byte[16];
byte[] b= key.getBytes("UTF-8");
int len= b.length;
if (len > keyBuf.length) len = keyBuf.length;
System.arraycopy(b, 0, keyBuf, 0, len);
SecretKeySpec keySpec = new SecretKeySpec(keyBuf, "AES256");
byte[] ivBuf= new byte[16];
//IvParameterSpec ivSpec = new IvParameterSpec(ivBuf);
IvParameterSpec ivSpec=null;
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] results = cipher.doFinal(text.getBytes("UTF-8"));
String result = Base64.encodeBase64String(results);
return result;
如何确保字符串“结果”保持不变?
【问题讨论】:
-
字节数组每次都不一样吗?
-
不,精确的字节数组保持不变。
-
什么是
Base64?你有它的文档的链接吗? -
为什么不直接使用 Android 中的 Base64 类? (不是 base64 转换是这里的问题 - 它是加密代码......)
-
您给出的代码还有另一个问题 - 您只要求“AES”作为密码,但创建了一个 AES256 密钥。那行不通-至少在我的机器上不行。使用“AES”创建密钥有效 - 然后每次提供具有相同 IV 字节的 IV 规范每次都会产生相同的结果。
标签: java android string encryption bytearray