cookie加密

时间:2011-09-12 14:25:13

标签: java

如何加密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());

2 个答案:

答案 0 :(得分:7)

首先:不指定编码时不要使用String.getBytes,最好是能够处理所有Unicode的东西,例如UTF-8。

其次:您提供的代码根本不会生成字符 - 它会生成字节。你一定不能将这些字节视为编码文本 - 它们不是。相反,您应该将它们转换为base64,例如使用Apache Commons Codecthis 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