在加密环境中,将字节数组转换为字符串并返回可能会带来挑战,通常会导致值不匹配和解密错误。以下是对这些问题的探索和详细的解决方案。
考虑以下加密场景:
public class NewEncrypter { // Encryption and decryption are performed on byte arrays, not strings public byte[] encrypt(String input) throws Exception { cipher.init(Cipher.ENCRYPT_MODE, key); return cipher.doFinal(input.getBytes("UTF-16")); } public String decrypt(byte[] encryptionBytes) throws Exception { cipher.init(Cipher.DECRYPT_MODE, key); return new String(cipher.doFinal(encryptionBytes), "UTF-16"); } }
但是,不鼓励将加密数据存储为字符串,因为它们的预期用途是供人类可读文本,而不是任意二进制数据。如果不可避免,那么使用字节和字符之间一对一映射的编码至关重要。
ISO-8859-1 编码
对于此特定场景,建议使用 ISO-8859-1 编码:
String decoded = new String(encryptedByteArray, "ISO-8859-1"); byte[] encoded = decoded.getBytes("ISO-8859-1");
避免常见的编码陷阱
UTF-16 编码可能会导致问题,因为:
替代编码
如果 ISO-8859-1 不满足您的要求,请考虑使用十六进制或 base64 编码。但是,这些需要额外的帮助程序库,因为它们没有在标准 API 中定义。
通过遵守这些准则并使用适当的编码,您可以解决加密过程中字节数组和字符串之间的差异。
以上是加密字节数组和字符串之间的数据时如何避免转换问题?的详细内容。更多信息请关注PHP中文网其他相关文章!