|
|
Publicado en 4/11/2015 12:37:23
|
|
|

Los requisitos del proyecto son: generar una clave privada y una clave pública, cifrar con clave pública, descifrar con clave privada, lo implementé así,
Espero poder ayudar a amigos que tengan esta necesidad.
El código fuente es el siguiente:
1. Generar un par de claves:
/// <summary> Generar clave privada y clave pública ARR[0] para clave privada ARR[1] para clave pública /// </summary> /// <returns></returns> cadena estática pública[] GenerateKeys() { string[] sKeys = nueva String[2]; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); sKeys[0] = rsa. ToXmlString (verdadero); sKeys[1] = rsa. ToXmlString (falso); devolver sKeys; }
2. Cifrado:
/// <summary> Cifrado RSA /// </summary> <param name="sSource" >Cadena de origen</param> <param name="sPublicKey" >clave pública</param> /// <returns></returns> cadena pública estática EncryptString(cadena sSource, cadena sPublicKey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); texto plano de cadena = sSource; RSA. FromXmlString (sPublicKey); Byte[] cipherbitos; byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); cipherbytes = RSA. Encrypt (Encoding.UTF8.GetBytes(texto plano), false);
StringBuilder sbString = nuevo StringBuilder(); para (int i = 0; Yo < Cipherbytes. Longitud; i++) { sbString.Append(cipherbytes+ ","); }
3. Descifrado:
/// <summary> Descifrado RSA /// </summary> <param name="sSource">Cadena Source</param> <param name="sPrivateKey">Clave privada</param> /// <returns></returns> cadena estática pública DecryptString(String sSource, cadena sPrivateKey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); RSA. FromXmlString (sPrivateKey); byte[] byteEn = rsa. Encrypt(Encoding.UTF8.GetBytes("a"), false); cadena[] sBytes = sSource.Split(',');
para (int j = 0; j < sBytes. Longitud; j++) { si (sBytes[j] != "") { byteEn[j] = Byte.Parse(sBytes[j]); } } byte[] plaintbytes = rsa. Decifrar (byteEn, false); return Encoding.UTF8.GetString(plaintbytes); } return sbString.ToString(); }
--------------------------------------------------------------------
Código fuente de cifrado y descifrado RSA:
usando Sistema; usando System.Collections.Generic; usando System.Linq; usando System.Text; usando System.Security.Cryptography;
Espacio de nombres MyRSA Espacio de nombres MyRSA
{
públicaclass 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(cadena base64code)
{
Prueba
{
Crea un UnicodeEncoder para convertir entre el array de bytes y la cadena.
UnicodeEncoding ByteConverter = nuevo UnicodeEncoding();
Crear una nueva instancia de RSACryptoServiceProvider para generar
datos de clave pública y privada.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
RSA. FromXmlString (llave privada);
byte[] encryptedData;
byte[] descifrado Data;
encryptedData = Convert.FromBase64String(base64code);
Pasar los datos a DECRYPT, la información de la clave privada
(usando RSACryptoServiceProvider.ExportParameters(true),
y una bandera booleana que especifica que no hay relleno OAEP.
decryptedData = RSADecrypt(
encryptedData, RSA. ExportParameters (true), false);
Muestra el texto plano descifrado en la consola.
return ByteConverter.GetString(decryptedData);
}
captura (excepciones exc)
{
Exceptions.LogException(exc);
Console.WriteLine(etc. Mensaje);
regresar"";
}
}
staticpublicstring Encrypt(cadena aEncriptarCadena)
{
Prueba
{
Crea un UnicodeEncoder para convertir entre el array de bytes y la cadena.
UnicodeEncoding ByteConverter = nuevo UnicodeEncoding();
Crea arrays de bytes para almacenar datos originales, cifrados y descifrados.
byte[] dataToEncrypt =
ByteConverter.GetBytes(toEncryptString);
byte[] encryptedData;
byte[] descifrado Data;
Crear una nueva instancia de RSACryptoServiceProvider para generar
datos de clave pública y privada.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
RSA. FromXmlString (llave privada);
Pasar los datos a ENCRYPT, la información de clave pública
(usando RSACryptoServiceProvider.ExportParameters(false),
y una bandera booleana que especifica que no hay relleno OAEP.
encryptedData = RSAEncrypt(
dataToEncrypt, RSA. ExportParameters (false), false);
cadena base64code = Convert.ToBase64String(encryptedData);
devolver base64code;
}
captura (excepciones exc)
{
Detecta esta excepción por si el cifrado lo hacía
no tener éxito.
Exceptions.LogException(exc);
Console.WriteLine(etc. Mensaje);
regresar"";
}
}
staticprivatebyte[] RSAEncrypt(
byte[] DataToEncrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPañadiendo)
{
Prueba
{
Crea una nueva instancia de RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
Importa la información clave RSA. Esto solo necesita
para incluir la información de clave pública.
RSA. ImportParameters(RSAKeyInfo);
Cifra el array de bytes pasados y especifica el relleno OAEP.
El relleno OAEP solo está disponible en Microsoft Windows XP o
Más tarde.
Devuelve RSA. Encrypt(DataToEncrypt, DoOAEPPadding);
}
Captura y muestra una CryptographicException
A la consola.
catch (CryptographicException e)
{
Excepciones.LogException(e);
Consola.WriteLine(e.Message);
returnnull;
}
}
staticprivatebyte[] RSADecrypt(
byte[] DataToDecrypt,
RSAParameters RSAKeyInfo,
bool DoOAEPPañadiendo)
{
Prueba
{
Crea una nueva instancia de RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider();
Importa la información clave RSA. Esto necesita
para incluir la información de la clave privada.
RSA. ImportParameters(RSAKeyInfo);
Descifra el array de bytes pasados y especifica el relleno OAEP.
El relleno OAEP solo está disponible en Microsoft Windows XP o
Más tarde.
Devuelve RSA. Decifrar (DataToDecrypt, DoOAEPPadding);
}
Captura y muestra una CryptographicException
A la consola.
catch (CryptographicException e)
{
Excepciones.LogException(e);
Consola.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:Crea tu propio foro personal gratis, puedes ganar dinero construyendo en tu nombre, y puedes hacerlo en tres minutosPróximo:Uso de onclick y href en la etiqueta A en HTML
|