WP8.1 RSA 加解密实例(导入公钥私钥)
2014-12-31 10:07
239 查看
因项目上需要用到,之前在WP8.0的环境上调试通过,现在在开发8.1时发现已不支持原来的加密库,所以无法使用以前的方法,不得已,去寻找windows命名空间下RSA的加解密方法,经过几天的尝试,将解决方案贴出来,看能否帮助碰到如此类型的问题的同学.
本示例的应且场景,服务器端返回RSA的公钥私钥,客户端导入公钥及私钥
服务端:
System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(xmlPrivatelKey);//此处为XML格式的私钥,如
//<RSAKeyValue><Modulus>.........Mk=</Modulus><Exponent>AQAB</Exponent><P>....../.....LGAAE=</D></RSAKeyValue>
byte[] data1 = rsa.ExportCspBlob(false);
byte[] data2 = rsa.ExportCspBlob(true);
String pubkey = System.Convert.ToBase64String(data1);
string privKey = System.Convert.ToBase64String(data2);
WP8.1:
public static byte[] Encrypt(byte[] data, string publicKey)
{
IBuffer buffer = WindowsRuntimeBufferExtensions.AsBuffer(data, 0, data.Length);
AsymmetricKeyAlgorithmProvider asymmetricAlgorithm = AsymmetricKeyAlgorithmProvider.OpenAlgorithm("RSA_PKCS1");
try
{
// 根据算法名称实例化一个非对称算法提供程序
CryptographicKey key = asymmetricAlgorithm.ImportPublicKey(CryptographicBuffer.DecodeFromBase64String(publicKey), CryptographicPublicKeyBlobType.Capi1PublicKey);
IBuffer encrypted = CryptographicEngine.Encrypt(key, buffer, null);
// 加密后的结果
return encrypted.ToArray();
}
catch (Exception er)
{
return new byte[0];
}
}
public static byte[] Decrypt(byte[] data, string publicKey, string privateKey)
{
IBuffer buffer = WindowsRuntimeBufferExtensions.AsBuffer(data, 0, data.Length);
// 根据算法名称实例化一个非对称算法提供程序
AsymmetricKeyAlgorithmProvider asymmetricAlgorithm = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1);
try
{
CryptographicKey pubkey = asymmetricAlgorithm.ImportPublicKey(CryptographicBuffer.DecodeFromBase64String(publicKey), CryptographicPublicKeyBlobType.Capi1PublicKey);
// 导入公钥私钥对
CryptographicKey keyPair2 = asymmetricAlgorithm.ImportKeyPair(CryptographicBuffer.DecodeFromBase64String(privateKey), CryptographicPrivateKeyBlobType.Capi1PrivateKey);
// 解密数据(通过私钥)
IBuffer decrypted = CryptographicEngine.Decrypt(keyPair2, buffer, null);
return decrypted.ToArray();
}
catch (Exception er)
{
return new byte[0];
}
本示例的应且场景,服务器端返回RSA的公钥私钥,客户端导入公钥及私钥
服务端:
System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(xmlPrivatelKey);//此处为XML格式的私钥,如
//<RSAKeyValue><Modulus>.........Mk=</Modulus><Exponent>AQAB</Exponent><P>....../.....LGAAE=</D></RSAKeyValue>
byte[] data1 = rsa.ExportCspBlob(false);
byte[] data2 = rsa.ExportCspBlob(true);
String pubkey = System.Convert.ToBase64String(data1);
string privKey = System.Convert.ToBase64String(data2);
WP8.1:
public static byte[] Encrypt(byte[] data, string publicKey)
{
IBuffer buffer = WindowsRuntimeBufferExtensions.AsBuffer(data, 0, data.Length);
AsymmetricKeyAlgorithmProvider asymmetricAlgorithm = AsymmetricKeyAlgorithmProvider.OpenAlgorithm("RSA_PKCS1");
try
{
// 根据算法名称实例化一个非对称算法提供程序
CryptographicKey key = asymmetricAlgorithm.ImportPublicKey(CryptographicBuffer.DecodeFromBase64String(publicKey), CryptographicPublicKeyBlobType.Capi1PublicKey);
IBuffer encrypted = CryptographicEngine.Encrypt(key, buffer, null);
// 加密后的结果
return encrypted.ToArray();
}
catch (Exception er)
{
return new byte[0];
}
}
public static byte[] Decrypt(byte[] data, string publicKey, string privateKey)
{
IBuffer buffer = WindowsRuntimeBufferExtensions.AsBuffer(data, 0, data.Length);
// 根据算法名称实例化一个非对称算法提供程序
AsymmetricKeyAlgorithmProvider asymmetricAlgorithm = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1);
try
{
CryptographicKey pubkey = asymmetricAlgorithm.ImportPublicKey(CryptographicBuffer.DecodeFromBase64String(publicKey), CryptographicPublicKeyBlobType.Capi1PublicKey);
// 导入公钥私钥对
CryptographicKey keyPair2 = asymmetricAlgorithm.ImportKeyPair(CryptographicBuffer.DecodeFromBase64String(privateKey), CryptographicPrivateKeyBlobType.Capi1PrivateKey);
// 解密数据(通过私钥)
IBuffer decrypted = CryptographicEngine.Decrypt(keyPair2, buffer, null);
return decrypted.ToArray();
}
catch (Exception er)
{
return new byte[0];
}
相关文章推荐
- 整合一个基于c#的RSA私钥加密公钥解密的Helper类,含源码
- RSA加密:Windows Phone 公钥加密,Java私钥解密
- 关于JAVA中RSA加签解签,私钥加密公钥解密和公钥加密私钥解密代码详解
- Android RSA分段加解密,及私钥生成签名公钥验签
- RSA 公钥加密——私钥解密
- RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密
- Python 进行RSA私钥加密,公钥解密
- RSA加解密使用总结,.net私钥加密公钥解密,WinCE平台RSA加解密
- RSA加解密使用总结,.net私钥加密公钥解密,WinCE平台RSA加解密
- .NET生成RSA公钥和私钥-加密解密示例
- 银联手机支付(.Net Csharp),3DES加密解密,RSA加密解密,RSA私钥加密公钥解密,.Net RSA 3DES C#
- ios客户端RSA公钥加密 .net后台私钥解密解决方案(基于Openssl)
- iOS RSA公钥加密数据 服务端接受PHP私钥解密 反过服务端公钥加密数据 iOS端私钥解密数据
- RSA基于Java Web的前台公钥加密后台私钥解密
- openssl rsa 私钥加密,公钥解密测试
- c# RSA 加密解密 java.net公钥私钥转换 要解密的模块大于128字节
- RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密
- C#使用RSA私钥加密公钥解密的改进,解决特定情况下解密后出现乱码的问题
- iOS RSA公钥加密、私钥解密
- RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密