RSA加密算法
来源:互联网 发布:爱氏晨曦牛奶 知乎 编辑:程序博客网 时间:2024/06/05 00:40
</pre><pre name="code" class="csharp">大家好!我是小唐,最近刚转过来做游戏了,最近做RSA加密算法这一块,然后我的后台服务器是Java的,我用C#去写,分享给大家。希望对你们有帮助。<span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 20px;">用到一个开源加密库</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 20px;">Bouncy Castle Crypto APIs,</span><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 20px;">官网地址: </span><a target=_blank title="http://www.bouncycastle.org/csharp/" href="http://www.bouncycastle.org/csharp/" target="_blank" style="margin: 0px; padding: 1px 3px; color: green; text-decoration: none; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 20px;">http://www.bouncycastle.org/csharp/</a>
using UnityEngine;using System.Collections;using System.Security.Cryptography;using System;using System.Text;using System.Xml;using Org.BouncyCastle.Asn1.Pkcs;using Org.BouncyCastle.Asn1.X509;using Org.BouncyCastle.Crypto.Parameters;using Org.BouncyCastle.Math;using Org.BouncyCastle.Pkcs;using Org.BouncyCastle.Security;using Org.BouncyCastle.X509;public class test : MonoBehaviour{ //用户输入的密码 private string password = " moogame123456##,,你好"; //要进行加密的原文密码字符串 public string noEncryptString = string.Empty; //加密之后的字符串 public string encodeString = string.Empty; //解密之后的字符串 public string decodeString = string.Empty; private static string netPublicKey = string.Empty; private static string netPrivateKey = string.Empty; // Use this for initialization void Start() { //加密规则(将密码原文和时间戳用英文半角的逗号连接) noEncryptString = password + "," + GetTimeStamp(); netPublicKey = RSAPublicKeyJava2DotNet(publicKey); netPrivateKey= RSAPrivateKeyJava2DotNet(privateKey); UnitTest(); } private static string publicKey ="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCRxWOV1HDkxZWGDORdQBUjMpEji3JFiMY4nWNPaHWrGGSrzIqgPGGzXMBVD87CWfoXaHiFOQjhW7YenGnQRKCFa8bmnCXE1kEUb23MEtxYynVg5Pr8/ecg10UsWzOyHIboB8a/A6niKZ1m84FfAybJkl1Qpjvm1dg9J/0GVXhz6QIDAQAB"; private static string privateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJHFY5XUcOTFlYYM5F1AFSMykSOLckWIxjidY09odasYZKvMiqA8YbNcwFUPzsJZ+hdoeIU5COFbth6cadBEoIVrxuacJcTWQRRvbcwS3FjKdWDk+vz95yDXRSxbM7IchugHxr8DqeIpnWbzgV8DJsmSXVCmO+bV2D0n/QZVeHPpAgMBAAECgYBLuGgpfUgDXit0jZ/WXKJePTctapM6UXj+EatzpURyUuKAZ2ifIZ5yqDx0Mxjo1gpWPHtWYLEfNx+cOQ2yFOP4fB+Pfk9l80yPNfcnsOCWWZR2qOL8CyWZBrO3xUKZh/+KrTQvsLhIRaXMwqezJx7fW6JXIsJDM7JjhFD5d/3QcQJBAPSFIsQtzJTRHi3ZJ8qH2GBJPRRVkTxbfzAHs3tJTeMT+omanlkvuEHAjmzdoC0RIwHj/vgS0RblUnfv0MK9NpUCQQCYnWXcYjV+EQT0IWMEXuKIfI5RFrlK8bpU0u05Bg0f2cPKFjkRlx2JN3cOnGwp8FVSsz8gwsMOr3vzrKProxcFAkEAsZAosftsL7k3yCWEjr9dMnacwzJr+D+dOdytyl5uD/NHITvFt5A+pojVJFtAYNmr6UiOs8i+S3kWDQB6QaAzjQJAfRvC7hiAW5leIzffcSzLrjHVhToIqhxhsLm9CJsiVTLyow72t6nW567VZd/rd7HycDpLDPM8biSDi23CbyAidQJBALksugl3hFPOu21AVfXTwexzp+hkLGxcmmOm1kxFB6uObWRq4gFLBvEacC6VQYApRj7W9mVrpzkg58ypP383FNk="; /// <summary> /// RSA公钥格式转换,java->.net /// </summary> /// <param name="publicKey">java生成的公钥</param> /// <returns></returns> public static string RSAPublicKeyJava2DotNet(string publicKey) { RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKey)); return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent></RSAKeyValue>", Convert.ToBase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()), Convert.ToBase64String(publicKeyParam.Exponent.ToByteArrayUnsigned())); } /// <summary> /// RSA私钥格式转换,java->.net /// </summary> /// <param name="privateKey">java生成的RSA私钥</param> /// <returns></returns> public static string RSAPrivateKeyJava2DotNet(string privateKey) { RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKey)); return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>", Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned())); } /// <summary> /// 解密 /// </summary> /// <param name="base64code">Base64code.</param> public static string Decrypt(string toDecryptString) { const int PROVIDER_RSA_FULL = 1; const string CONTAINER_NAME = "Tracker"; CspParameters cspParams; cspParams = new CspParameters(PROVIDER_RSA_FULL); //密匙容器的名称,保持加密解密一致才能解密成功 cspParams.KeyContainerName = CONTAINER_NAME; RSACryptoServiceProvider rsa1 = new RSACryptoServiceProvider(cspParams); rsa1.FromXmlString(netPrivateKey); //把要解密的字符串转换成byte数组 byte[] encyrptedBytes = Convert.FromBase64String(toDecryptString); byte[] plain = rsa1.Decrypt(encyrptedBytes, false); string decryptedString = System.Text.Encoding.UTF8.GetString(plain); return decryptedString; } /// <summary> /// 加密 /// </summary> /// <param name="toEncryptString">To encrypt string.</param> public static string Encrypt(string toEncryptString) { const int PROVIDER_RSA_FULL = 1; const string CONTAINER_NAME = "Tracker"; CspParameters cspParams; cspParams = new CspParameters(PROVIDER_RSA_FULL); //密匙容器的名称,保持加密解密一致才能解密成功 cspParams.KeyContainerName = CONTAINER_NAME; RSACryptoServiceProvider rsa1 = new RSACryptoServiceProvider(cspParams); rsa1.FromXmlString(netPublicKey); //将要加密的字符串转换为字节数组 byte[] data2Decrypt = Encoding.UTF8.GetBytes(toEncryptString); //将加密后的字节数据转换为新的加密字节数组 byte[] plain = rsa1.Encrypt(data2Decrypt, false); //将加密后的字节数组转换为字符串 string encryptString = Convert.ToBase64String(plain); return encryptString; } private static byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding) { try { RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); //导入RSA密钥信息。这只需要包含公钥信息。 RSA.ImportParameters(RSAKeyInfo); //加密过的字节数组并指定OAEP填充。OAEP填充只能在微软Windows XP或以后 return RSA.Encrypt(DataToEncrypt, DoOAEPPadding); } catch (CryptographicException e) { Debug.LogError(e.Message); return null; } } private static byte[] RSADecrypt(byte[] DataToDecrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding) { try { RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); //导入RSA密钥信息。这需要包括私钥信息 RSA.ImportParameters(RSAKeyInfo); //解密的字节数组,指定了OAEP padding.oaep填充只能在微软Windows XP或以后 return RSA.Decrypt(DataToDecrypt, DoOAEPPadding); } catch (CryptographicException e) { Debug.LogError(e.Message); return null; } } /// <summary> /// 单元测试 /// </summary> public void UnitTest() { //Debug.LogError("加密前:"+password+"Length:"+password.Length); Debug.LogError("加密前:" + password + "Length:" + password.Length); encodeString = Encrypt(password); Debug.LogError("加密后:"+encodeString); //decodeString = Decrypt(encodeString); //Debug.LogError("解密后:"+decodeString+"Length:"+decodeString.Length); decodeString = Decrypt(encodeString); Debug.LogError("解密后:" + decodeString + "Length:" + decodeString.Length); }
0 0
- RSA 加密算法
- RSA加密算法
- rsa加密算法
- RSA加密算法
- Rsa加密算法
- RSA加密算法
- RSA加密算法
- RSA加密算法
- rsa加密算法
- 加密算法:RSA
- RSA加密算法
- RSA加密算法
- RSA加密算法
- RSA 加密算法
- RSA 加密算法
- RSA加密算法
- RSA加密算法
- RSA 加密算法
- 日经社説 20150316 難民に冷たい国でいいのか
- VMWare中的Host-only、NAT、Bridge的比较
- Linux命令8——cp
- android service getIntent
- CentOS简单命令:date cal bc
- RSA加密算法
- iOS 里的MVC
- javascript new Date()函数在不同浏览器上返回不同的值
- 一道试题引发的血案 int *ptr2=(int *)((int)a+1)
- 发表评论动态样式实现——便签贴纸
- 日经社説 20150316 医療の効率化へ試される都道府県の力量
- 南北互联网创业者的差异
- ANT-build.xml文件详解
- Android 快速开发系列 ORMLite 框架最佳实践