2017-09-13 9 views
0

SecurityDriven.Inferno AesCtrCryptoTransfomクラスの使用例は誰でも提供できますか? 、私は多くの暗号で完璧に動作するアプリケーションを拡張していますInferno AesCtrCryptoTransform

ライブラリは非常に有望なようだが、私はそれを使って任意のコードを見つけることができませんし、付属の詳細は、私暗号ダミーのために十分ではありません...

AESカウンタモードはサポートしていません。いくつかのSSHv2セッションにこのaes-128-ctr暗号が必要です。 アプリケーションは、以下のようなさまざまな暗号のすべてのための非常にシンプルな暗号インタフェースを、持っている:

internal interface Cipher 
    { 
    void Encrypt(byte[] data, int offset, int len, byte[] result, int result_offset); 
    void Decrypt(byte[] data, int offset, int len, byte[] result, int result_offset); 
    int BlockSize { get; } 
    } 

私は以下のようにAesCtrCryptoTransformを使用してインターフェイスのimplementaionを作成したが、それは動作しません。

public class AES128CTR : Cipher 
{ 
    private System.Security.Cryptography.ICryptoTransform Encryptor; 
    private ArraySegment<Byte> _counter; 

    public AES128CTR(byte[] key, byte[] iv) 
    { 
    _counter = new ArraySegment<byte>(iv); 
    Encryptor = new SecurityDriven.Inferno.Cipher.AesCtrCryptoTransform(key, _counter); 
    } 

    public int BlockSize { get { return Encryptor.InputBlockSize; } } 

    public void Decrypt(byte[] data, int offset, int len, byte[] result, int result_offset) 
    { 
    Encryptor.TransformBlock(data, 0, len, result, 0); 
    } 

    public void Encrypt(byte[] data, int offset, int len, byte[] result, int result_offset) 
    { 
    Encryptor.TransformBlock(data, 0, len, result, 0); 
    } 
} 

これは簡単に行う必要があります。私は明らかに間違いを理解できないようにする必要があります。どのようなアイデアをしてくださいこれを行う方法をしてください?ここで

+1

私は「それは動作しません」のコードを投稿の努力を称賛するが、それでも最悪のエラーの説明です。 TLS実装用の* adapter *を作成しましたが、アダプター内のコード*に問題がないとは考えられません。だから私はこれがTLSセッションをデバッグするのに十分な情報ではないと思っています。たとえあったとしても、実際にはオンラインデバッグにはあまり適していません。 –

答えて

1

は、実用的なソリューションです:

public class AES128CTR : Cipher 
    { 
    private byte[] _key; 
    private byte[] _iv; 

    public AES128CTR(byte[] key, byte[] iv, int KeySize = 128) 
    { 
     this._key = key; 
     this._iv = iv; 
    } 

    public int BlockSize { get { return _iv.Length; } } 

    public void Decrypt(byte[] data, int offset, int len, byte[] result, int result_offset) 
    { 
     SecurityDriven.Inferno.Cipher.AesCtrCryptoTransform transformation = new SecurityDriven.Inferno.Cipher.AesCtrCryptoTransform(_key, new ArraySegment<byte>(_iv)); 
     using (MemoryStream ms = new MemoryStream()) 
     { 
     using (System.Security.Cryptography.CryptoStream cs = new System.Security.Cryptography.CryptoStream(ms, transformation, System.Security.Cryptography.CryptoStreamMode.Write)) 
     { 
      cs.Write(data, offset, len); 
     } 
     var r = ms.ToArray(); 
     Array.Copy(r, result, r.Length); 
     } 
    } 

    public void Encrypt(byte[] data, int offset, int len, byte[] result, int result_offset) 
    { 
     SecurityDriven.Inferno.Cipher.AesCtrCryptoTransform transformation = new SecurityDriven.Inferno.Cipher.AesCtrCryptoTransform(_key, new ArraySegment<byte>(_iv)); 
     using (MemoryStream ms = new MemoryStream()) 
     { 
     using (System.Security.Cryptography.CryptoStream cs = new System.Security.Cryptography.CryptoStream(ms, transformation, System.Security.Cryptography.CryptoStreamMode.Write)) 
     { 
      cs.Write(data, offset, len); 
     } 
     var r = ms.ToArray(); 
     Array.Copy(r, result, r.Length); 
     } 
    } 

    } 
+0

素晴らしい、まさに私が必要なもの。 'CryptoStream'に渡す' MemoryStream'には暗号テキスト( 'data'パラメータ)が含まれ、モードは' CryptoStreamMode.Read'でなければなりません。次に、 'cs.Write()'の代わりに 'cs.Read()'を呼び出します。 – murf

関連する問題