使用会话密钥加密Xml

时间:2016-07-13 11:31:59

标签: java xml session encryption session-keys

我有一个存储在String中的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;
}

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

1 个答案:

答案 0 :(得分:0)

会话密钥是否为私有密码,如果不存在安全问题。

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

由于似乎没有iv并且没有指定模式,所以假设模式是ECB是不安全的,对于CBC模式更好,其中随机iv在加密数据之前用于解密期间使用

缺少加密认证,密钥生成较弱,最好使用PBKDF2等派生函数。

不要使用ECB模式,这是不安全的,请参阅ECB mode,向下滚动到企鹅。

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