Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C中的加密密钥#_C#_Windows_Cryptography_Rsa - Fatal编程技术网

C# C中的加密密钥#

C# C中的加密密钥#,c#,windows,cryptography,rsa,C#,Windows,Cryptography,Rsa,这个呼叫的C#等价物是什么 如果你能描述一下你的C代码,那就太好了 正在使用hKey、HPPublicey和SIMPLEBLOB(或C#中的等效项)这就是我使用的 using System.Security.Cryptography; using System.Security.Cryptography.Xml; // retrieve from named keystore private void btnRetrieve_Click(object sende

这个呼叫的C#等价物是什么

如果你能描述一下你的C代码,那就太好了

正在使用hKey、HPPublicey和SIMPLEBLOB(或C#中的等效项)

这就是我使用的

    using System.Security.Cryptography;
    using System.Security.Cryptography.Xml;

    // retrieve from named keystore
    private void btnRetrieve_Click(object sender, RoutedEventArgs e)
    {
        string keyContainer = this.tbContainerName.Text;

        CspParameters parms = new CspParameters(1);
        parms.Flags = CspProviderFlags.UseMachineKeyStore;
        parms.KeyContainerName = keyContainer;
        parms.KeyNumber = 2;
        RSACryptoServiceProvider RsaCsp = new RSACryptoServiceProvider(parms);

        tbPubKeyBlob.Text = RsaCsp.ToXmlString(false);
    }

    // generate key pair
    private void btnCreateKeypair_Click(object sender, RoutedEventArgs e)
    {
        int keySize = 0;
        if (!System.Int32.TryParse(this.tbKeySize.Text, out keySize))
            keySize = 1024;
        byte[] key = Keys.GenerateKeyPair(keySize);

        RSACryptoServiceProvider RsaCsp = new RSACryptoServiceProvider();
        RsaCsp.ImportCspBlob(key);

        tbPubKeyBlob.Text = RsaCsp.ToXmlString(false);

    }
这就是我用的

    using System.Security.Cryptography;
    using System.Security.Cryptography.Xml;

    // retrieve from named keystore
    private void btnRetrieve_Click(object sender, RoutedEventArgs e)
    {
        string keyContainer = this.tbContainerName.Text;

        CspParameters parms = new CspParameters(1);
        parms.Flags = CspProviderFlags.UseMachineKeyStore;
        parms.KeyContainerName = keyContainer;
        parms.KeyNumber = 2;
        RSACryptoServiceProvider RsaCsp = new RSACryptoServiceProvider(parms);

        tbPubKeyBlob.Text = RsaCsp.ToXmlString(false);
    }

    // generate key pair
    private void btnCreateKeypair_Click(object sender, RoutedEventArgs e)
    {
        int keySize = 0;
        if (!System.Int32.TryParse(this.tbKeySize.Text, out keySize))
            keySize = 1024;
        byte[] key = Keys.GenerateKeyPair(keySize);

        RSACryptoServiceProvider RsaCsp = new RSACryptoServiceProvider();
        RsaCsp.ImportCspBlob(key);

        tbPubKeyBlob.Text = RsaCsp.ToXmlString(false);

    }

我认为你最好的办法是手动操作

SIMPLEBLOB格式是

BLOBHEADER blobheader;
ALG_ID algid;
BYTE encryptedkey[rsapubkey.bitlen/8];
BLOBHEADER在哪里

BYTE   bType;
BYTE   bVersion;
WORD   reserved;
ALG_ID aiKeyAlg;
所以像这样的东西应该可以做到(对不起,没有测试):

public byte[]CryptExportKey(对称算法密钥,RSA公钥){
使用(MemoryStream ms=new MemoryStream())
使用(BinaryWriter w=新的BinaryWriter(w)){
w、 写入((字节)0x01);//SIMPLEBLOB
w、 写入((字节)0x02);//版本2
w、 写入((字节)0x00);//保留
w、 写入((字节)0x00);//保留
if(键为Rijndael){
w、 写入(0x00006611);//加密密钥的ALG_ID。
}else if(键为三元组&&key.KeySizeValue==192){
w、 写入(0x00006603);//加密密钥的ALG_ID。
}否则{
抛出新的NotSupportedException(“查找http://msdn.microsoft.com/en-us/library/aa375549%28VS.85%29.aspx");
}
w、 写入(0x0000a400);//计算RSA密钥
字节[]encryptedKey=publicKey.Encrypt(key.key);
byte[]reversedEncryptedKey=新字节[encryptedKey.Length];

对于(inti=0;i我认为最好的办法是手动处理

SIMPLEBLOB格式是

BLOBHEADER blobheader;
ALG_ID algid;
BYTE encryptedkey[rsapubkey.bitlen/8];
BLOBHEADER在哪里

BYTE   bType;
BYTE   bVersion;
WORD   reserved;
ALG_ID aiKeyAlg;
所以像这样的东西应该可以做到(对不起,没有测试):

public byte[]CryptExportKey(对称算法密钥,RSA公钥){
使用(MemoryStream ms=new MemoryStream())
使用(BinaryWriter w=新的BinaryWriter(w)){
w、 写入((字节)0x01);//SIMPLEBLOB
w、 写入((字节)0x02);//版本2
w、 写入((字节)0x00);//保留
w、 写入((字节)0x00);//保留
if(键为Rijndael){
w、 写入(0x00006611);//加密密钥的ALG_ID。
}else if(键为三元组&&key.KeySizeValue==192){
w、 写入(0x00006603);//加密密钥的ALG_ID。
}否则{
抛出新的NotSupportedException(“查找http://msdn.microsoft.com/en-us/library/aa375549%28VS.85%29.aspx");
}
w、 写入(0x0000a400);//计算RSA密钥
字节[]encryptedKey=publicKey.Encrypt(key.key);
byte[]reversedEncryptedKey=新字节[encryptedKey.Length];
对于(int i=0;i