|
|
Publisert på 07.10.2017 17:39:00
|
|
|
|

Nylig gjorde jeg en innloggingsfunksjon etter simuleringen, innloggingspassordet er kryptert av CryptoJS aes, og så vil jeg skrive den tilsvarende algoritmen i C# Introduksjon til AES-krypteringsalgoritmen:
Advanced Encryption Standard (forkortelse: AES), også kjent som Rijndael-kryptering i kryptografi, er en blokkkrypteringsstandard vedtatt av den amerikanske føderale regjeringen. Denne standarden brukes til å erstatte den opprinnelige DES-en og har blitt analysert og mye brukt over hele verden. Etter en femårig utvelgelsesprosess ble Advanced Cryptographic Standard publisert av National Institute of Standards and Technology (NIST) i FIPS PUB 197 den 26. november 2001, og ble en gyldig standard den 26. mai 2002. I 2006 ble Advanced Encryption Standard en av de mest populære algoritmene for symmetrisk nøkkelkryptografi. Js-algoritmen er som følger:
Jeg søkte etter nettbaserte AES-krypteringsnettsteder på Internett, og resultatene er forskjellige fra min egen kryptering, AES ser ut til å ha mange moduser, og jeg har sett andres introduksjoner fra Internett
Start med å forberede en klartekst og nøkkel: var plaintText = 'aaaaaa'; Klartekst var keyStr = 'bbbbbbbbbbbbbbbb'; Vanligvis er nøkkelen en streng Ifølge dokumentasjonen på den offisielle nettsiden støtter AES-metoden AES-128, AES-192 og AES-256, og krypteringsmetoden som brukes i krypteringsprosessen avhenger av typen innkommende nøkkel, ellers vil den bli kryptert i henhold til AES-256. CryptoJS støtter AES-128, AES-192 og AES-256. Den velger varianten ut fra størrelsen på nøkkelen du passerer inn. Hvis du bruker en passfrase, vil den generere en 256-bits nøkkel. Siden Java gis i henhold til 128bit, men siden det er en streng, må det konverteres til 128bit på frontend. Først trodde jeg at bruk av CryptoJS.enc.Hex.parse ville konvertere den korrekt til en 128-bits nøkkel. Men ellers... Etter mange forsøk må du bruke metoden CryptoJS.enc.Utf8.parse for å konvertere nøkkelen til 128-bits. Vel, siden det sies at det er flere forsøk, er årsaken ikke kjent, og det vil bli studert nærmere senere. Før du bruker nøkkelen til strengtypen, må du parse med uft8 før du kan bruke den var key = CryptoJS.enc.Utf8.parse(keyStr); Siden backend bruker PKCS5Padding, men ved bruk av CryptoJS, ble det funnet at det ikke var noen offset i det hele tatt. Kryptering var encryptedData = CryptoJS.AES.encrypt(plaintText, key, { modus: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); Siden chifferteksten generert av CryptoJS er et objekt, hvis du konverterer den direkte til en streng som er en Base64-kodet, er attributtet på encryptedData. Chiffertekst konverteres til en streng er formatet som kreves av backend. var encryptedBase64Str = encryptedData.toString(); Output: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY=' console.log(kryptertBase64Str); Du må lese ciphertext.toString() på encryptedData for å få samme chiffertekst som Java var encryptedStr = encryptedData.ciphertext.toString(); Utdata: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06' console.log(kryptertStr); Siden den krypterte chifferteksten er en 128-bits streng, må den konverteres til Base64-kodet format ved dekryptering. Deretter må du bruke metoden CryptoJS.enc.Hex.parse for å konvertere det til heksadesimal, og deretter bruke CryptoJS.enc.Base64.stringify for å konvertere det til en Base64-kodet streng, og så kan du sende det til CryptoJS.AES.decrypt-metoden for å dekryptere det. For å få chifferteksten til strengtypen må du først parse den med Hex-metoden var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr); Konverter chiffertekst til Base64-strenger Kun Base64-type strengchiffertekst kan dekryptere det var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr); Strengen konvertert til Base64-koding kan sendes inn i CryptoJS.AES.decrypt-metoden for dekrypteringsoperasjon. Dekryptering var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, { modus: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); Etter CryptoJS-dekryptering er det fortsatt et objekt, og å gjøre det om til klartekst må konverteres til en streng i Utf8-format. Etter dekryptering må klartekststrengen transponeres på samme måte som Utf8 var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8); console.log(dekryptertStr); 'Aaaaaaa'
Her er kildekoden for .NET/C#-implementasjonen av AES:
|
Foregående:[12306] Beklager, fordi du opererer passasjeren for ofte, vennligst prøv igjen i morgenNeste:C# implementerer prosessminnekartlegging fildelingsminne
|