|
|
Yayınlandı 7.10.2017 17:39:00
|
|
|
|

Son zamanlarda bir simülasyon sonrası giriş fonksiyonu yaptım, giriş şifresi CryptoJS aes ile şifreleniyor ve sonra ilgili algoritmayı C# ile yazmak istiyorum AES şifreleme algoritmasına giriş:
Gelişmiş Şifreleme Standardı (kısaltması: AES), kriptografide Rijndael şifreleme olarak da bilinir, ABD federal hükümeti tarafından benimsenen bir blok şifreleme standardıdır. Bu standart, orijinal DES'in yerini almak için kullanılır ve dünya çapında analiz edilip yaygın olarak kullanılmaktadır. Beş yıllık bir seçim sürecinin ardından, İleri Kriptografik Standart Ulusal Standartlar ve Teknoloji Enstitüsü (NIST) tarafından 26 Kasım 2001'de FIPS PUB 197'de yayımlandı ve 26 Mayıs 2002'de geçerli bir standart haline geldi. 2006 yılında, İleri Şifreleme Standardı, simetrik anahtar kriptografisi için en popüler algoritmalardan biri haline geldi. js algoritması şöyledir:
İnternette çevrimiçi AES şifreleme siteleri aradım ve sonuçlar kendi şifrelememden farklı, AES'in birçok modu var gibi görünüyor ve başkalarının internetten tanışmalarını gördüm
Bir açık metin ve anahtar olarak başla: var plaintText = 'aaaaaaaa'; Düz metin var keyStr = 'bbbbbbbb'; Genellikle, anahtar bir ipliktir Resmi web sitesi dokümantasyonuna göre, AES yöntemi AES-128, AES-192 ve AES-256'yı destekler ve şifreleme sürecinde kullanılan şifreleme yöntemi gelen anahtarın türüne bağlıdır; aksi takdirde anahtar AES-256'ya göre şifrelenir. CryptoJS AES-128, AES-192 ve AES-256'yı destekler. Varyantı, verdiğiniz anahtarın boyutuna göre seçer. Bir şifre kullanırsanız, 256 bitlik bir anahtar oluşturur. Java 128bit olarak verildiği için, ancak bir dizi olduğu için ön uçta 128 bit'e dönüştürülmelidir. Başta, CryptoJS.enc.Hex.parse kullanmanın bunu doğru şekilde 128-bit anahtara dönüştüreceğini düşündüm. Ama aksi takdirde... Birçok denemeden sonra, anahtarı 128-bit'e dönüştürmek için CryptoJS.enc.Utf8.parse yöntemini kullanmanız gerekir. Çünkü bunun birden fazla deneme olduğu söyleniyorsa, nedeni bilinmiyor ve daha sonra daha derinlemesine incelenecek. Tel türünün anahtarını kullanmadan önce, uft8 ile ayrıştırmanız gerekir var key = CryptoJS.enc.Utf8.parse(keyStr); Arka uç PKCS5Padding kullandığı için ancak CryptoJS kullanıldığında hiç ofset olmadığı tespit edildi. Şifreleme var encryptedData = CryptoJS.AES.encrypt(plaintText, key, { mod: CryptoJS.mode.ECB, Dolgu: CryptoJS.pad.Pkcs7 }); CryptoJS tarafından oluşturulan şifreli metin bir nesne olduğundan, doğrudan Base64 kodlu bir diziye dönüştürürseniz, encryptedData.ciphertext üzerindeki öznitelik, arka uçun gerektirdiği formata dönüştürülür. var encryptedBase64Str = encryptedData.toString(); Output: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY=' console.log(şifreliBase64Str); Java ile aynı şifreli metni almak için ciphertext.toString() dosyasını encryptedData üzerinde okumanız gerekir var encryptedStr = encryptedData.ciphertext.toString(); Çıktı: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06' console.log(şifreliStr); Şifrelenmiş şifreli metin 128 bitlik bir dizi olduğundan, şifre çözerken Base64 kodlu formata dönüştürülmelidir. Sonra CryptoJS.enc.Hex.parse yöntemini kullanarak onaltılığa dönüştürmelisiniz, ardından CryptoJS.enc.Base64.stringify ile Base64 kodlu bir diziye dönüştürüp CryptoJS.AES.decrypt yöntemine aktarabilirsiniz. Diz tipinin şifreli metnini elde etmek için önce Hex yöntemiyle ayrıştırmanız gerekir var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr); Şifreli metni Base64 dizelerine dönüştürün Sadece Base64 tipi dizi şifreli metni bunu çözebilir var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr); Base64 kodlamasına dönüştürülen dize, şifre çözme işlemi için CryptoJS.AES.decrypt yöntemine aktarılabilir. Şifre Çözme var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, { mod: CryptoJS.mode.ECB, Dolgu: CryptoJS.pad.Pkcs7 }); CryptoJS şifre çözmesinden sonra hâlâ bir nesne olarak kalır ve düz metne dönüştürmek için Utf8 formatında bir diziye dönüştürülmelidir. Şifre çözüldükten sonra, açık metin dizisi Utf8 tarzında transpoze edilmelidir var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8); console.log(çözülmüşStr); 'aaaaaaaa'
İşte AES'in .NET/C# uygulamasının kaynak kodu:
|
Önceki:[12306] Üzgünüm, yolcu aracını çok sık kullanıyorsunuz, lütfen yarın tekrar deneyinÖnümüzdeki:C#, süreç belleği eşleme dosya paylaşımı belleğini uygular
|