3
public byte[] CryptDeriveKey(
    string algname,
    string alghashname,
    int keySize,
    byte[] rgbIV
)

algname にはどのようなオプションがあるのか​​、誰か教えてもらえますか? AES-128 および AES-256 の暗号化アルゴリズムを指定したい場合、algname には何を入力すればよいですか?

4

3 に答える 3

2

100%確信はありませんが、algnameあなたのアルゴリズム名です。keySizeキーのサイズです。

これを使用AES-128して、AES-256好きにする必要があります。

CryptDeriveKey("AES", "SHA1", 128, aes.IV)

CryptDeriveKey("AES", "SHA1", 256, aes.IV)

から詳細を確認してくださいMSDN

メソッドの逆コンパイルされたコードを次に示しますPasswordDeriveBytes.CryptDeriveKey

[SecuritySafeCritical]
public byte[] CryptDeriveKey(string algname, string alghashname, int keySize, byte[] rgbIV)
{
    if (keySize < 0)
    {
        throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidKeySize"));
    }
    int algidHash = X509Utils.NameOrOidToAlgId(alghashname, OidGroup.HashAlgorithm);
    if (algidHash == 0)
    {
        throw new CryptographicException(Environment.GetResourceString("Cryptography_PasswordDerivedBytes_InvalidAlgorithm"));
    }
    int algid = X509Utils.NameOrOidToAlgId(algname, OidGroup.AllGroups);
    if (algid == 0)
    {
        throw new CryptographicException(Environment.GetResourceString("Cryptography_PasswordDerivedBytes_InvalidAlgorithm"));
    }
    if (rgbIV == null)
    {
        throw new CryptographicException(Environment.GetResourceString("Cryptography_PasswordDerivedBytes_InvalidIV"));
    }
    byte[] o = null;
    DeriveKey(this.ProvHandle, algid, algidHash, this._password, this._password.Length, keySize << 0x10, rgbIV, rgbIV.Length, JitHelpers.GetObjectHandleOnStack<byte[]>(ref o));
    return o;
}

これはメソッドの逆コンパイルされたコードですNameOrOidToAlgId

internal static int NameOrOidToAlgId(string oid, OidGroup oidGroup)
{
    if (oid == null)
    {
        return 0x8004;
    }
    string str = CryptoConfig.MapNameToOID(oid, oidGroup);
    if (str == null)
    {
        str = oid;
    }
    int algIdFromOid = GetAlgIdFromOid(str, oidGroup);
    switch (algIdFromOid)
    {
        case 0:
        case -1:
            throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidOID"));
    }
    return algIdFromOid;
}
于 2013-01-16T15:13:31.053 に答える
2

Reflectorここには、解決策を見つけるのが好きな逆アセンブラはいません。ある場合は、メソッドにアクセスしmscorlib.dllて逆コンパイルしPasswordDerivedBytes.CryptDeriveKeyます。サポートされている文字列が表示されます。

ちなみに、AESはサポートされていません:こちら

于 2013-01-16T15:15:03.470 に答える