2016-07-13 4 views
0

私はStringに格納されているXmlを持っています。セッション鍵(AESと256bit)を使って暗号化する必要があります。セッションキーを使用してXmlを暗号化します

私は鍵を生成するには、次のコードを使用しています

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; 
} 

だから、私が知りたい、私は右のそれをやっています間違っている?

答えて

0

セキュリティ上の問題がない場合は、セッションキーをプライベートにしますか?

暗号化モードを指定していないため、明示的に指定することをお勧めします。

ivが存在せず、モードが指定されていないので、モードが安全でないECBであるため、暗号化データの先頭にランダムなivを付けた方がCBCモードよりも優れています復号化する。

また、暗号化認証が欠けており、鍵生成が弱いため、PBKDF2などの派生機能を使用する方がよいでしょう。

ECBモードを使用しないでください。それは安全ではありません。ECB modeを参照して、ペンギンまでスクロールしてください。

RNCryptorのJMCryptorのようなPBKDF2キーの派生、暗号化認証、ランダムivおよびバージョン管理を含むより完全なライブラリの使用を検討してください。詳細については、Specification for RNCryptorも参照してください。

+0

すべての提案をいただき、ありがとうございます。しかし、私はまた、上記のコードで行われた暗号化が正しいかどうかを知りたいですか? – Mudit

+0

それは「正しいかどうか」が何を意味するのかによって異なります。ベストプラクティスのセキュリティ:いいえ – zaph

+0

AESとPKCS7Paddingでセッションキーを使用してXMLを暗号化したかったので、上記のコードの暗号化結果を復号化できるかどうかを知りたいですか?今私はセキュリティに関心がありません – Mudit

関連する問題