2017-06-07 5 views
0

暗号化のためにカスタムチェーンモードを実装する必要があります。対称ブロック暗号(AES、3DES、DES、IDEA)を使用する必要があります。私が遭遇する問題は、私が見つけたライブラリ/ラッパーはそれを許さないということです。OpenSSLで.NETでカスタム連鎖モードを使用するには?

BouncyCastleにはEnum:Mode = CipherMode.CBCのようなものがありますので、私は自分自身を使用することができません。 System.Security.Cryptographyは同じように見えます。

カスタマイズされたチェーンモードが可能な.NETライブラリまたはラッパーはありますか?

今私が持っているのは、すべてのブロックをゼロビットでいっぱいのIVでCBCを使用して暗号化し、その上にチェーンモードを実装することですが、それは良い考えではありません。

答えて

1

私は、チェーンコールバックをサポートするライブラリについて知らないのですが、ほとんどの暗号化APIのブラックボックスに反しています。

目標を達成する方法は、ECBを使用して暗号化することです。これは、「このデータに暗号化アルゴリズムを適用する」ためです。例えば、CBCを行うには:

private byte[] _iv; 
private ICryptoTransform _encryptor; 

private void EncryptBlock(byte[] input, byte[] output) 
{ 
    byte[] buf = (byte[])input.Clone(); 

    for (int i = 0; i < buf.Length; i++) 
    { 
     buf[i] ^= _iv[i]; 
    } 

    _encryptor.TransformBlock(buf, 0, buf.Length, output, 0); 
    Buffer.BlockCopy(out, 0, _iv, 0, output.Length); 
} 

(エラーのすべての種類は省略チェック)

using (Aes aes = Aes.Create()) 
{ 
    aes.Mode = CipherMode.ECB; 
    aes.Key = key; 
    _encryptor = aes.CreateEncryptor(); 
    _decryptor = aes.CreateDecryptor(); 
} 

(など)としてどこかに初期化された事を考えます。

+0

ECBモードでは不十分な場合があります。 OPは変換方向を指定する必要があります。例えば、CTRモードは、ブロック暗号を、暗号化動作と復号化動作の両方について、その順方向(すなわち、暗号化)で動作させる。 – jww

関連する問題