Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 27517|Yanıt: 1

[Kaynak] .net/c# CryptoJS aes şifreli kaynak kodu

[Bağlantıyı kopyala]
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
Yayınlandı 29.05.2018 00:27:20 |
Büyük adamın gelişmiş kaynak koduna bakın
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com