如何加密cookie,因为它只接受US-ASCII字符?当我使用下面的代码时,它会从US_ASCII中生成字符。如何限制加密字符不要超出US_ASCII?
key = KeyGenerator.getInstance(algorithm).generateKey();
cipher = Cipher.getInstance("DESede");
messageSource.getMessage("encryption.algorithm",null,localeUtil.getLocale());
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] outputBytes = cipher.doFinal(input.getBytes());
答案 0 :(得分:7)
首先:不指定编码时不要使用String.getBytes
,最好是能够处理所有Unicode的东西,例如UTF-8。
其次:您提供的代码根本不会生成字符 - 它会生成字节。你一定不能将这些字节视为编码文本 - 它们不是。相反,您应该将它们转换为base64,例如使用Apache Commons Codec或this public domain code。
然后当你需要解密时,你只需要反转所有步骤 - 从base64转换回二进制,解密,然后用new String(decryptedBytes, "UTF-8")
(或你决定使用的任何编码)创建一个字符串。
答案 1 :(得分:0)
public static final String CHARSET = "ISO-8859-1";
String text = "Ángel";
String encodedText = new String(Base64.encodeBase64(text.getBytes(CHARSET)));
String decodedText = new String(Base64.decodeBase64(encodedText.getBytes(CHARSET)))
除了Jon的回答,你可以在这里查看可用的编码: http://docs.oracle.com/javase/6/docs/api/java/nio/charset/Charset.html