|
|
Paskelbta 2017-10-07 17:39:00
|
|
|
|

Neseniai atlikau prisijungimo funkciją po modeliavimo, prisijungimo slaptažodį užšifruoja CryptoJS aes, o tada noriu parašyti atitinkamą algoritmą C# Įvadas į AES šifravimo algoritmą:
Išplėstinis šifravimo standartas (santrumpa: AES), taip pat žinomas kaip Rijndael šifravimas kriptografijoje, yra blokų šifravimo standartas, kurį priėmė JAV federalinė vyriausybė. Šis standartas naudojamas pakeisti originalų DES ir buvo analizuojamas bei plačiai naudojamas visame pasaulyje. Po penkerių metų atrankos proceso Nacionalinis standartų ir technologijų institutas (NIST) paskelbė išplėstinį kriptografinį standartą FIPS PUB 197 2001 m. lapkričio 26 d. ir tapo galiojančiu standartu 2002 m. gegužės 26 d. 2006 m. Išplėstinis šifravimo standartas tapo vienu populiariausių simetrinio rakto kriptografijos algoritmų. JS algoritmas yra toks:
Aš ieškojau internetinių AES šifravimo svetainių internete, ir rezultatai skiriasi nuo mano šifravimo, AES atrodo, kad turi daug režimų, ir aš mačiau kitų žmonių įvadus iš interneto
Pradėkite nuo paprasto teksto ir rakto paruošimo: var plaintText = 'aaaa Paprastas tekstas var keyStr = 'bbbbbbbbbbbb'; Paprastai raktas yra eilutė Remiantis oficialia svetainės dokumentacija, AES metodas palaiko AES-128, AES-192 ir AES-256, o šifravimo procese naudojamas šifravimo metodas priklauso nuo gaunamo rakto tipo, kitaip jis bus užšifruotas pagal AES-256. CryptoJS palaiko AES-128, AES-192 ir AES-256. Jis parinks variantą pagal perduodamo rakto dydį. Jei naudosite slaptafrazę, ji sugeneruos 256 bitų raktą. Kadangi "Java" suteikiama pagal 128 bitų, bet kadangi tai yra eilutė, ją reikia konvertuoti į 128 bitų priekinėje dalyje. Iš pradžių maniau, kad naudojant CryptoJS.enc.Hex.parse būtų teisingai konvertuoti jį į 128 bitų raktą. Bet šiaip ... Po daugelio bandymų turite naudoti CryptoJS.enc.Utf8.parse metodą, kad konvertuotumėte raktą į 128 bitų. Na, o kadangi sakoma, kad tai yra keli bandymai, tada priežastis nežinoma, ir ji bus giliau ištirta vėliau. Prieš naudodami eilutės tipo raktą, prieš naudodami jį turite išanalizuoti su uft8 var raktas = CryptoJS.enc.Utf8.parse(keyStr); Kadangi užpakalinė dalis naudoja PKCS5Padding, tačiau naudojant CryptoJS, buvo nustatyta, kad poslinkio visai nėra. Šifravimas var encryptedData = CryptoJS.AES.encrypt(plaintText, raktas, { režimas: CryptoJS.mode.ECB, užpildymas: CryptoJS.pad.Pkcs7 }); Kadangi CryptoJS sugeneruotas šifruotas tekstas yra objektas, jei konvertuojate jį tiesiai į eilutę, yra užkoduotas Base64, encryptedData.ciphertext atributas konvertuojamas į eilutę, kurios reikalauja užpakalinė sistema. var encryptedBase64Str = encryptedData.toString(); Išvestis: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY=' console.log(užšifruotasBase64Str); Norėdami gauti tą patį šifruotą tekstą, turite perskaityti ciphertext.toString() užšifruotame Data, kad gautumėte tą patį šifruotą tekstą kaip ir Java var encryptedStr = encryptedData.ciphertext.toString(); Išvestis: "44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06" console.log(užšifruotasStr); Kadangi užšifruotas šifruotas tekstas yra 128 bitų eilutė, iššifruojant jį reikia konvertuoti į Base64 užkoduotą formatą. Tada turite naudoti metodą CryptoJS.enc.Hex.parse, kad konvertuotumėte jį į šešioliktainį, tada naudokite CryptoJS.enc.Base64.stringify, kad konvertuotumėte jį į Base64 užkoduotą eilutę, tada galite perduoti jį CryptoJS.AES.decrypt metodui, kad jį iššifruotumėte. Norėdami gauti eilutės tipo šifruotą tekstą, pirmiausia turite jį išanalizuoti šešiakampiu metodu var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr); Konvertuoti šifruotą tekstą į Base64 eilutes Tik Base64 tipo eilutės šifruotas tekstas gali jį iššifruoti var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr); Eilutė, konvertuota į Base64 kodavimą, gali būti perduota į CryptoJS.AES.decrypt metodą iššifravimo operacijai. Iššifravimas var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, raktas, { režimas: CryptoJS.mode.ECB, užpildymas: CryptoJS.pad.Pkcs7 }); Po CryptoJS iššifravimo jis vis dar yra objektas, o paverčiant jį paprastu tekstu reikia konvertuoti į eilutę Utf8 formatu. Po iššifravimo paprasto teksto eilutę reikia perkelti Utf8 būdu var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8); console.log(decryptedStr); "aaaa
Čia yra AES .NET/C# diegimo šaltinio kodas:
|
Ankstesnis:[12306] Atsiprašome, nes per dažnai naudojate keleivius, bandykite dar kartą rytojKitą:C# įgyvendina proceso atminties atvaizdavimą failų bendrinimo atmintyje
|