C# C中的加密密钥#
这个呼叫的C#等价物是什么 如果你能描述一下你的C代码,那就太好了 正在使用hKey、HPPublicey和SIMPLEBLOB(或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
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