代码之家  ›  专栏  ›  技术社区  ›  Amit Teli

java中加密/解密Cookie的轻量级方法

  •  0
  • Amit Teli  · 技术社区  · 6 年前

    我们需要在cookie中为spring MVC应用程序保留一些标志 每一个请求都会被检查并设置在拦截器中。因为我们需要使应用程序无状态,所以我们不想在会话中存储任何东西。

    我的问题是我们如何最有效地加密/解密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 回复  |  直到 6 年前