轻巧的Java加密/解密Cookie方法

时间:2019-01-03 10:15:34

标签: java spring-mvc encryption cookies

对于Spring MVC应用程序,我们需要在cookie中保留一些标志 它将针对每个请求进行检查并设置在拦截器中。由于我们需要使应用程序变为无状态,因此我们不想在会话中存储任何内容。

我的问题是我们如何最有效地加密/解密cookie? (尽可能减少CPU /时间)。 当前,使用AES加密大约需要200毫秒的加密时间,而解密则需要花费相似的时间。考虑到我们需要针对每个请求执行此操作,因此这是非常高的开销。

使用较长时间的AES代码更新问题

public static String encrypt(String value) {
    try {
        IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
        SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");

        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);

        byte[] encrypted = cipher.doFinal(value.getBytes());
        return Base64.encodeBase64String(encrypted);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return null;
}   

public static String decrypt(String encrypted) {
    try {
        IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
        SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");

        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
        cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
        byte[] original = cipher.doFinal(Base64.decodeBase64(encrypted));

        return new String(original);
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    return null;
}

有人可以建议这种要求的标准做法吗?

谢谢。

0 个答案:

没有答案