2

以下の Java コードを C# に移植しようとしていますが、これに相当するものを特定するのに苦労しています。

SecretKey skey
SecretKeySpec skey_spec
IvParameterSpec iv_spec
KeyPair rsaKey
KeyGenerator kgen

誰かが私を助けてくれれば幸いです...

package entry;

public class Encrypt {
    SecretKey skey;
    SecretKeySpec skey_spec;
    byte[] iv;
    IvParameterSpec iv_spec;

    KeyPair rsaKey;

    Random random;

    public Encrypt() {
        random = new Random();
    }

    public void initAES() {
        System.out.println("Initializing AES Keys...");
        KeyGenerator kgen = null;

        try {
            kgen = KeyGenerator.getInstance("AES");
        } catch(NoSuchAlgorithmException nsae) {
            nsae.printStackTrace();
        }

        kgen.init(256);

        // Generate the secret key specs.
        skey = kgen.generateKey();
        byte[] raw = skey.getEncoded();

        skey_spec = new SecretKeySpec(raw, "AES");

        iv = new byte[16];
        random.nextBytes(iv);
        iv_spec = new IvParameterSpec(iv);
    }
}

C# での UPDATE 試行:

private byte[] _secretKey_iv;
private byte[] _secretKey;

private void GenerateKey()
{
    RijndaelManaged myAES = new RijndaelManaged();
    myAES.KeySize = 256;
    myAES.GenerateIV();
    myAES.GenerateKey();

    _secretKey_iv = myAES.IV;
    _secretKey = myAES.Key;
}

更新#2:

KeyGenerator kgen
SecretKeySpec skey_spec
IvParameterSpec iv_spec

生成された AES キーから仕様を取得する方法がまだわかりません。それを行う方法を理解する助けをいただければ幸いです。それが KeyGenerator の正しい変換であるかどうかはまだわかりません。

KeyGenerator は BouncyCastleProvider の一部ですか?

4

4 に答える 4

1

以前の SO の投稿、(および同様の) オブジェクトがAdvanced Encryption Standard (AES) ライブラリの一部であるように見えるAES 暗号化の c# 実装を見てみましょう。SecretKey

于 2011-06-04T05:26:18.200 に答える
1

System.Security.Cryptography私の推測では、おそらく名前空間を見たいと思うでしょう。

別の注意として、これらのクラスへの直接の翻訳はないようですが、System.Security.Cryptography.AESManagedとにかく仕事を成し遂げるための機能を提供するように見えます.

于 2011-06-04T05:29:27.567 に答える
0

私が思いついた最も近い変換はこれでした。CastleBouncyメソッドを使用してパラメーターを取得しました。c#で変換と暗号化を再現するために、Javaコードからランダムなものやその他のものは必要ありませんでした。

public class Encrypt
{
    private byte[] skey;
    private byte[] iv;
    private ParametersWithIV skey_spec;

    public Encrypt()
    {
    }

    public void initAES()
    {
        RijndaelManaged myAES = new RijndaelManaged();
        myAES.Padding = PaddingMode.PKCS7;
        myAES.Mode = CipherMode.CBC;
        myAES.KeySize = 256;
        myAES.BlockSize = 128;
        myAES.GenerateIV();
        myAES.GenerateKey();

        skey = myAES.Key;
        iv = myAES.IV;

        skey_spec = new ParametersWithIV(new KeyParameter(skey), iv);
    }
}

さらに使用することができます:

public byte[] aesDecrypt(byte[] data)
{
    IBufferedCipher cipher = CipherUtilities.GetCipher("AES/CBC/PKCS5Padding");
    cipher.Init(false, skey_spec);
    return cipher.DoFinal(data);
}

public byte[] aesEncrypt(byte[] data)
{
    IBufferedCipher cipher = CipherUtilities.GetCipher("AES/CBC/PKCS5Padding");
    cipher.Init(true, skey_spec);
    return cipher.DoFinal(data);
}
于 2011-06-05T13:42:00.643 に答える
0

あなたのコードフラグメントは完全に間違っている/壊れています。まず、KeyGenerator のインスタンスが完全に間違っているケースを処理しています。アルゴリズムが利用できない場合、あなたの kgen インスタンスは null になり、残りが続行できなくなり、null 参照で実際に何かを行うことができなくなります。

于 2011-06-04T05:29:56.150 に答える