|
|
Publié sur 04/11/2015 12:37:23
|
|
|

Les exigences du projet : générer une clé privée et une clé publique, chiffrer avec une clé publique, déchiffrer avec une clé privée, je l’ai implémenté comme ceci,
J’espère pouvoir aider des amis qui ont ce besoin.
Le code source est le suivant :
1. Générer une paire de clés :
/// <summary> Générer une clé privée et une clé publique ARR[0] pour la clé privée ARR[1] pour la clé publique /// </summary> /// <returns></returns> chaîne statique publique[] GenerateKeys() { chaîne[] sKeys = nouvelle chaîne[2] ; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider() ; sKeys[0] = rsa. ToXmlString (vrai) ; sKeys[1] = rsa. ToXmlString (faux) ; retour des sKeys ; }
2. Chiffrement :
/// <summary> Cryptage RSA /// </summary> <param name="sSource » >Chaîne de sources</param> <param name="sPublicKey » >clé publique</param> /// <returns></returns> chaîne statique publique EncryptString(chaîne sSource, chaîne sPublicKey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider() ; chaîne de texte clair = sSource ; RSA. FromXmlString (sPublicKey) ; octet[] chiffres cipherbytes ; octet[] octetEn = rsa. Encrypt(Encoding.UTF8.GetBytes(« a »), faux) ; cipherbytes = RSA. Encrypt (Encoding.UTF8.GetBytes(texte clair), faux) ;
StringBuilder sbString = nouveau StringBuilder() ; pour (int i = 0 ; J’ai < Cipherbytes. Longueur ; i++) { sbString.Append(cipherbytes+ ","); }
3. Déchiffrement :
/// <summary> Décryptage RSA /// </summary> <param name="sSource">Chaîne de sources</param> <param name="sPrivateKey">Clé privée</param> /// <returns></returns> chaîne statique publique DecryptString(Source de chaîne, chaîne sPrivateKey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider() ; RSA. FromXmlString (sPrivateKey) ; octet[] octetEn = rsa. Encrypt(Encoding.UTF8.GetBytes(« a »), faux) ; chaîne[] sOctets = sSource.Split(',') ;
pour (int j = 0 ; j < octets. Longueur ; j++) { si (sBytes[j] != « ») { octetEn[j] = Octet.analyse(sOctets[j]) ; } } octet[] plaintbytes = rsa. Déchiffrer (octetEn, faux) ; return Encoding.UTF8.GetString(plaintbytes) ; } return sbString.ToString() ; }
--------------------------------------------------------------------
Code source du chiffrement et du déchiffrement RSA :
utilisant System ; utilisant System.Collections.Generic ; utilisant System.Linq ; en utilisant System.Text ; utilisant System.Security.Cryptography ;
Espace de noms MyRSA Espace de noms MyRSA
{
publicclass 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 Déchiffrer (chaîne base64code)
{
essaie
{
Créez un UnicodeEncoder pour convertir entre un tableau d’octets et une chaîne.
UnicodeEncoding ByteConverter = nouveau UnicodeEncoding() ;
Créer une nouvelle instance de RSACryptoServiceProvider pour générer
Données à clé publique et privée.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider() ;
RSA. FromXmlString (privateKey) ;
octet[] chiffredData ;
octet[] décryptéData ;
encryptedData = Convert.FromBase64String(base64code) ;
Transmettez les données à DECRYPT, les informations de clé privée
(utilisant RSACryptoServiceProvider.ExportParameters(true),
et un drapeau booléen ne précisant pas de remplissage OAEP.
decryptedData = RSADecrypt(
encryptedData, RSA. ExportParameters (vrai), faux) ;
Affichez le texte en clair déchiffré sur la console.
return ByteConverter.GetString(decryptedData) ;
}
capture (exception exc)
{
Exceptions.LogException(exc) ;
Console.WriteLine(exc. Message) ;
retour » ;
}
}
staticpublicstring Encrypt(chaîne versEncryptString)
{
essaie
{
Créez un UnicodeEncoder pour convertir entre un tableau d’octets et une chaîne.
UnicodeEncoding ByteConverter = nouveau UnicodeEncoding() ;
Créez des baies d’octets pour contenir les données originales, chiffrées et déchiffrées.
octet[] dataToEncrypt =
ByteConverter.GetBytes(toEncryptString) ;
octet[] chiffredData ;
octet[] décryptéData ;
Créer une nouvelle instance de RSACryptoServiceProvider pour générer
Données à clé publique et privée.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider() ;
RSA. FromXmlString (privateKey) ;
Transmets les données à ENCRYPT, c’est-à-dire les informations de clé publique
(en utilisant RSACryptoServiceProvider.ExportParameters(false),
et un drapeau booléen ne précisant pas de remplissage OAEP.
encryptedData = RSAEncrypt(
dataToEncrypt, RSA. ExportParameters (faux), faux) ;
chaîne base64code = Convert.ToBase64String(encryptedData) ;
retourner base64code ;
}
capture (exception exc)
{
Prenez cette exception au cas où le chiffrement en aurait eu
Pas réussi.
Exceptions.LogException(exc) ;
Console.WriteLine(exc. Message) ;
retour » ;
}
}
staticprivatebyte[] RSAEncrypt(
octet[] DataToEncrypt,
RSAParamètres RSAKeyInfo,
bool DoOAEPPajout)
{
essaie
{
Créez une nouvelle instance de RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider() ;
Importez les informations de clé RSA. Il suffit de cela
pour inclure les informations à clé publique.
RSA. ImportParameters(RSAKeyInfo) ;
Chiffrer le tableau d’octets passés et spécifier le remplissage OAEP.
Le remplissage OAEP n’est disponible que sur Microsoft Windows XP ou
Plus tard.
Retourner RSA. Encrypter (DataToEncrypt, DoOAEPPadding) ;
}
Capturez et affichez une CryptographicException
vers la console.
catch (CryptographicException e)
{
Exceptions.LogException(e) ;
Console.WriteLine(e.Message) ;
returnnull ;
}
}
staticprivatebyte[] RSADecrypt(
octet[] DataToDecrypt,
RSAParamètres RSAKeyInfo,
bool DoOAEPPajout)
{
essaie
{
Créez une nouvelle instance de RSACryptoServiceProvider.
RSACryptoServiceProvider RSA =new RSACryptoServiceProvider() ;
Importez les informations de clé RSA. Cela doit être nécessaire
Inclure les informations de clé privée.
RSA. ImportParameters(RSAKeyInfo) ;
Déchiffrez le tableau d’octets passés et spécifiez le remplissage OAEP.
Le remplissage OAEP n’est disponible que sur Microsoft Windows XP ou
Plus tard.
Retourner RSA. Déchiffrer (DataToDecrypt, DoOAEPPadding) ;
}
Capturez et affichez une CryptographicException
vers la console.
catch (CryptographicException e)
{
Exceptions.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();
- }
Code de copie
|
Précédent:Créez votre propre forum personnel gratuitement, vous pouvez gagner de l’argent en construisant pour vous, et vous pouvez le faire en trois minutesProchain:Utilisation d’onclick et href dans le tag A en HTML
|