|
|
Publicado em 04/11/2015 12:37:23
|
|
|

Os requisitos do projeto são: gerar uma chave privada e uma chave pública, criptografar com chave pública, descriptografar com chave privada, implementei assim,
Espero poder ajudar amigos que têm essa necessidade.
O código-fonte é o seguinte:
1. Gerar um par de chaves:
/// <summary> Gerar chave privada e chave pública ARR[0] para chave privada ARR[1] para chave pública /// </summary> /// <returns></returns> string estático público[] GenerateKeys() { string[] sKeys = nova String[2]; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); sKeys[0] = rsa. ToXmlString (verdadeiro); sKeys[1] = rsa. ToXmlString (falso); retorno de sKeys; }
2. Criptografia:
/// <summary> /// RSA Encrypt /// </summary> <param name="sSource" >Cadeia de Source</param> <param name="sPublicKey" >chave pública</param> /// <returns></returns> string estática pública EncryptString(string sSource,string sPublicKey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); string texto simples = sSource; RSA. FromXmlString (sPublicKey); cipherbitas de bytes; byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); cipherbytes = RSA. Encrypt(Encoding.UTF8.GetBytes(texto simples), falso);
StringBuilder sbString = novo StringBuilder(); para (int i = 0; Eu < cipherbytes. Comprimento; i++) { sbString.Append(cipherbytes+ ","); }
3. Descriptografia:
/// <summary> Descriptografia RSA /// </summary> <param name="sSource">Cadeia de Source</param> <param name="sPrivateKey">Chave Privada</param> /// <returns></returns> string estática pública DecryptString(String sSource, string sPrivateKey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); RSA. FromXmlString(sPrivateKey); byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); string[] sBytes = sSource.Split(',');
para (int j = 0; j < sBytes. Comprimento; j++) { se (sBytes[j] != "") { byteEn[j] = Byte.Parse(sBytes[j]); } } byte[] plaintbytes = rsa. Decrypt(byteEn, false); return Encoding.UTF8.GetString(plaintbytes); } return sbString.ToString(); }
--------------------------------------------------------------------
Código-fonte de criptografia e descriptografia RSA:
usando o Sistema; usando System.Collections.Generic; usando System.Linq; usando System.Text; usando System.Security.Cryptography;
Namespace MyRSA Namespace MyRSA
{
Classe pública MyRSA
{
privatestaticstring publicKey =
"<RSAKeyValue><Modulus>6CdsXgYOyya/yQH"+
"TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L"+
"wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx"+
"PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE"+
"/PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP"+
"w9YRXiac=</Modulus><Exponent>AQAB";</Exponent></RSAKeyValue>
privatestaticstring privateKey =
"<RSAKeyValue><Modulus>6CdsXgYOyya/yQH"+
"TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L"+
"wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx"+
"PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE"+
"/PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP"+
"w9YRXiac=</Modulus><Exponent>AQAB</Exponent>"+
"<P>/aoce2r6tonjzt1IQI6FM4ysR40j/gKvt4d"+
"L411pUop1Zg61KvCm990M4uN6K8R/DUvAQdrRd"+
"VgzvvAxXD7ESw==</P><Q>6kqclrEunX/fmOle"+
"VTxG4oEpXY4IJumXkLpylNR3vhlXf6ZF9obEpG"+
"lq0N7sX2HBxa7T2a0WznOAb0si8FuelQ==</Q>"+
"<DP>3XEvxB40GD5v/Rr4BENmzQW1MBFqpki6FU"+
"GrYiUd2My+iAW26nGDkUYMBdYHxUWYlIbYo6Te"+
"zc3d/oW40YqJ2Q==</DP><DQ>LK0XmQCmY/ArY"+
"gw2Kci5t51rluRrl4f5l+aFzO2K+9v3PGcndjA"+
"StUtIzBWGO1X3zktdKGgCLlIGDrLkMbM21Q==</DQ><InverseQ>"+
"GqC4Wwsk2fdvJ9dmgYlej8mTDBWg0Wm6aqb5kjn"+
"cWK6WUa6CfD+XxfewIIq26+4Etm2A8IAtRdwPl4"+
"aPjSfWdA==</InverseQ><D>a1qfsDMY8DSxB2D"+
"Cr7LX5rZHaZaqDXdO3GC01z8dHjI4dDVwOS5ZFZ"+
"s7MCN3yViPsoRLccnVWcLzOkSQF4lgKfTq3IH40"+
"H5N4gg41as9GbD0g9FC3n5IT4VlVxn9ZdW+WQry"+
"oHdbiIAiNpFKxL/DIEERur4sE1Jt9VdZsH24CJE=</D></RSAKeyValue>";
staticpublicstring Decrypt(string base64code)
{
tente
{
Crie um UnicodeEncoder para converter entre array de bytes e string.
UnicodeEncoding ByteConverter = novo UnicodeEncoding ();
Crie uma nova instância de RSACryptoServiceProvider para gerar
Dados de chave pública e privada.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
RSA. FromXmlString (chave privada);
byte[] criptografado Data;
byte[] decryptedData;
encryptedData = Convert.FromBase64String(base64code);
Passe os dados para o DECRYPT, as informações da chave privada
(usando RSACryptoServiceProvider.ExportParameters(true),
e uma bandeira booleana que não especifica preenchimento OAEP.
decryptedData = RSADecrypt(
encryptedData, RSA. ExportParameters (true), false);
Exiba o texto simples descriptografado no console.
return ByteConverter.GetString(decryptedData);
}
captura (exceção exc)
{
Exceptions.LogException(exc);
Console.WriteLine(exc. Mensagem);
retornar"";
}
}
staticpublicstring Encrypt(string paraEncryptString)
{
tente
{
Crie um UnicodeEncoder para converter entre array de bytes e string.
UnicodeEncoding ByteConverter = novo UnicodeEncoding ();
Crie arrays de bytes para armazenar dados originais, criptografados e descriptografados.
byte[] dataToEncrypt =
ByteConverter.GetBytes(paraEncriptarString);
byte[] criptografado Data;
byte[] decryptedData;
Crie uma nova instância de RSACryptoServiceProvider para gerar
Dados de chave pública e privada.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
RSA. FromXmlString (chave privada);
Passe os dados para o ENCRYPT, a informação de chave pública
(usando RSACryptoServiceProvider.ExportParameters(false),
e uma bandeira booleana que não especifica preenchimento OAEP.
encryptedData = RSAEncrypt(
dataToEncrypt, RSA. ExportParameters (falso), falso);
string base64code = Convert.ParaBase64String(encryptedData);
devolver base64code;
}
captura (exceção exc)
{
Observe essa exceção caso a criptografia tenha feito isso
não ter sucesso.
Exceptions.LogException(exc);
Console.WriteLine(exc. Mensagem);
retornar"";
}
}
staticprivatebyte[] RSAEncrypt(
byte[] DataToEncrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadimento)
{
tente
{
Crie uma nova instância do RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
Importe as informações da chave RSA. Isso só precisa
para incluir as informações da chave pública.
RSA. ImportParameters(RSAKeyInfo);
Criptografe o array de bytes passados e especifique o preenchimento OAEP.
O preenchimento OAEP está disponível apenas no Microsoft Windows XP ou
Depois.
Devolva RSA. Encrypt(DataToEncrypt, DoOAEPPadding);
}
Capture e exiba uma CryptographicException
para o console.
catch (CryptographicException e)
{
Exceções.LogException(e);
Console.WriteLine(e.Message);
returnnull;
}
}
staticprivatebyte[] RSADecrypt(
byte[] DataToDecrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPadimento)
{
tente
{
Crie uma nova instância do RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
Importe as informações da chave RSA. Isso precisa
para incluir as informações da chave privada.
RSA. ImportParameters(RSAKeyInfo);
Descriptografe o array de bytes passados e especifique o preenchimento OAEP.
O preenchimento OAEP está disponível apenas no Microsoft Windows XP ou
Depois.
Devolva RSA. Decrypt(DataToDecrypt, DoOAEPPadding);
}
Capture e exiba uma CryptographicException
para o console.
catch (CryptographicException e)
{
Exceções.LogException(e);
Console.WriteLine(e.Message);
returnnull;
}
}
}
}
- static void Main(string[] args)
- {
- string encodeString = MyRSA.Encrypt("1234567");
- Console.WriteLine(encodeString);
- string decode = MyRSA.Decrypt(encodeString);
- Console.WriteLine(decode);
- Console.ReadLine();
- }
Copiar código
|
Anterior:Construa seu próprio fórum pessoal de graça, você pode ganhar dinheiro construindo em seu nome, e pode fazer isso em três minutosPróximo:Uso de onclick e href na tag A em HTML
|