【问题标题】:Encrypting Xml using session key使用会话密钥加密 Xml
【发布时间】:2016-11-15 23:20:45
【问题描述】:

我有一个存储在字符串中的 XML。我需要使用会话密钥(AES 和 256 位)对其进行加密。

我正在使用以下代码生成密钥:

public byte[] generateSessionKey() throws NoSuchAlgorithmException, NoSuchProviderException
{
    KeyGenerator kgen = KeyGenerator.getInstance("AES","BC");
    kgen.init(SYMMETRIC_KEY_SIZE);
    SecretKey key = kgen.generateKey();
    byte[] symmKey = key.getEncoded();
    return symmKey;
}

使用以下代码使用会话密钥加密数据:

public byte[] encryptUsingSessionKey(byte[] skey, byte[] data) throws InvalidCipherTextException
{
    PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new AESEngine(), new PKCS7Padding());

     cipher.init(true, new KeyParameter(skey));

     int outputSize = cipher.getOutputSize(data.length);

     byte[] tempOP = new byte[outputSize];
     int processLen = cipher.processBytes(data, 0, data.length, tempOP, 0);
     int outputLen = cipher.doFinal(tempOP, processLen);

     byte[] result = new byte[processLen + outputLen];
     System.arraycopy(tempOP, 0, result, 0, result.length);
     return result;
}

所以,我想知道,我这样做是对还是错?

【问题讨论】:

    标签: java xml session encryption session-keys


    【解决方案1】:

    会话密钥是私有的,否则存在安全问题。

    您没有指定加密模式,最好是明确的。

    由于似乎没有 iv 并且没有指定模式,因此假设模式是不安全的 ECB,最好使用 CBC 模式,在加密数据之前添加一个随机 iv,以便在解密期间使用.

    同样缺少加密认证,密钥生成能力较弱,最好使用PBKDF2之类的推导函数。

    不要使用 ECB 模式,它不安全,请参阅ECB mode,向下滚动到 Penguin。

    考虑使用更完整的库,例如 RNCryptor 的 JMCryptor,其中包括 PBKDF2 密钥派生、加密身份验证、随机 iv 和版本控制。另请参阅Specification for RNCryptor 了解更多信息。

    【讨论】:

    • 感谢所有建议,我会采纳的。但是我也想知道,上面的代码加密对不对?
    • 这取决于“对与否”是什么意思?最佳实践安全:否。
    • 我想用AES和PKCS7Padding的会话密钥加密XML,所以我想知道上面代码的加密结果可以解密吗?现在我不关心安全
    猜你喜欢
    • 2010-11-06
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多