Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 27517|Répondre: 1

[Source] Code source .net/c# CryptoJS aes chiffré

[Copié le lien]
Publié sur 07/10/2017 17:39:00 | | | |
Récemment, j’ai réalisé une fonction de connexion après simulation, le mot de passe est chiffré par CryptoJS aes, puis je veux écrire l’algorithme correspondant en C#
Introduction à l’algorithme de chiffrement AES :

La norme de chiffrement avancée (abréviation : AES), également connue sous le nom de chiffrement de Rijndael en cryptographie, est une norme de chiffrement par blocs adoptée par le gouvernement fédéral américain. Cette norme est utilisée pour remplacer la DES originale et a été analysée et largement utilisée dans le monde entier. Après un processus de sélection de cinq ans, la norme cryptographique avancée a été publiée par le National Institute of Standards and Technology (NIST) dans FIPS PUB 197 le 26 novembre 2001, et est devenue une norme valide le 26 mai 2002. En 2006, l’Advanced Encryption Standard est devenu l’un des algorithmes les plus populaires pour la cryptographie à clé symétrique.

L’algorithme js est le suivant :



J’ai cherché des sites web de chiffrement AES en ligne sur Internet, et les résultats sont différents de ceux du mien : AES semble avoir de nombreux modes, et j’ai vu les présentations d’autres personnes sur Internet


Commencez par préparer un texte clair et une clé :
var plaintText = 'aa' ; Texte clair
var keyStr = 'bbbbbbbbbbbbbb' ; En général, la clé est une chaîne  
Selon la documentation officielle du site web, la méthode AES prend en charge AES-128, AES-192 et AES-256, et la méthode de chiffrement utilisée dans le processus de chiffrement dépend du type de clé entrante, sinon elle sera chiffrée selon AES-256.
CryptoJS prend en charge AES-128, AES-192 et AES-256. Il choisira la variante selon la taille de la clé que vous passez. Si vous utilisez une phrase secrète, elle générera une clé de 256 bits.
Puisque Java est donné selon le 128 bits, mais comme il s’agit d’une chaîne, il doit être converti en 128 bits en frontend.
Au début, je pensais qu’utiliser CryptoJS.enc.Hex.parse convertirait correctement en clé 128 bits. Mais sinon...
Après de nombreuses tentatives, vous devez utiliser la méthode CryptoJS.enc.Utf8.parse pour convertir la clé en 128 bits. Eh bien, puisqu’on dit qu’il s’agit de multiples tentatives, la raison n’est pas connue, et cela sera étudié plus en profondeur plus tard.
Avant d’utiliser la tonalité du type de corde, il faut parseer avec uft8 avant de pouvoir l’utiliser
var key = CryptoJS.enc.Utf8.parse(keyStr) ;  
Comme le backend utilise PKCS5Padding, mais en utilisant CryptoJS, il a été constaté qu’il n’y avait aucun décalage.
Chiffrement
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {  
    mode : CryptoJS.mode.ECB,
    remplissage : CryptoJS.pad.Pkcs7
});
Puisque le texte chiffré généré par CryptoJS est un objet, si vous le convertissez directement en une chaîne encodée en Base64, l’attribut sur encryptedData. le texte chiffré est converti en chaîne correspond au format requis par le backend.
var encryptedBase64Str = encryptedData.toString() ;
Sortie : 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='
console.log(encryptedBase64Str) ;
Vous devez lire cifrhertext.toString() sur encryptedData pour obtenir le même texte chiffré que Java
var encryptedStr = encryptedData.ciphertext.toString() ;  
Sortie : '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06'
console.log(Str crypté) ;  
Puisque le texte chiffré est une chaîne de 128 bits, il doit être converti en format encodé Base64 lors du déchiffrement.
Ensuite, il faut utiliser la méthode CryptoJS.enc.Hex.parse pour la convertir en hexadécimal, puis utiliser CryptoJS.enc.Base64.stringify pour la convertir en chaîne encodée en Base64, puis la passer à la méthode CryptoJS.AES.decrypt pour la déchiffrer.
Pour obtenir le texte chiffré du type de chaîne, il faut d’abord le parsécher avec la méthode hexadécimale
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr) ;
Convertir le texte chiffré en chaînes Base64
Seul le texte chiffré de type Base64 peut le déchiffrer
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr) ;  
La chaîne convertie en encodage Base64 peut être passée dans la méthode CryptoJS.AES.decrypt pour l’opération de déchiffrement.
Déchiffrement
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {  
    mode : CryptoJS.mode.ECB,
    remplissage : CryptoJS.pad.Pkcs7
});
Après le déchiffrement CryptoJS, il reste un objet, et le transformer en texte clair doit être converti en chaîne au format Utf8.
Après déchiffrement, la chaîne de texte clair doit être transposée à la manière d’Utf8
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8) ;  
console.log(décryptéStr) ; 'aa'




Voici le code source de l’implémentation .NET/C# de l’AES :







Précédent:[12306] Désolé, parce que vous conduisez trop souvent le passager, veuillez réessayer demain
Prochain:C# implémente la correspondance de mémoire de processus en mémoire de partage de fichiers
Publié sur 29/05/2018 00:27:20 |
Référez-vous au code source avancé du gros bonnet
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com