2016-04-07 15 views
2

Ich habe versucht, in eckigen mit AES-librery von AES zu verschlüsseln.In JavaScript verschlüsseln und in C# mit AES-Algorithmus entschlüsseln

Ich verschlüssle Zeichenfolge mit der CryptoJS.AES.encrypt() Methode von AES.

hier mein Code:

var txtloginKod = 'Some String...'; 
    var key = CryptoJS.enc.Utf8.parse('8080808080808080'); 
    var iv = CryptoJS.enc.Utf8.parse('8080808080808080'); 
    var encryptedlogin = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(txtloginKod), key, 
    { 
     keySize: 128/8, 
     iv: iv, 
     mode: CryptoJS.mode.CBC, 
     padding: CryptoJS.pad.Pkcs7 
    }); 

Verfahren CryptoJS.AES.encrypt() ein Objekt meiner encryptedlogin Variable zurück.

Ich weiß nicht, wie dieses Ziel zu meinem WCF Web-Server sendet in C#

Wenn ich versuche, das Loch Objekt zu senden (und die Web-Service-Methode definieren zu erwarten C# Objekt erhalten) - ich diesen Fehler habe:

„Konvertieren von Kreisstruktur zu JSON“

+1

Dies ist, wofür das https-Protokoll ist. – dbugger

+0

Gibt es ein Problem mit meiner Antwort? Wenn nicht und es Ihr Problem gelöst hat, können Sie es akzeptieren (http://meta.stackexchange.com/q/5234/266187). –

Antwort

0

Sie würden sich der verschlüsselte Text serialisiert müssen. Es gibt viele Möglichkeiten, dies zu tun. Wenn der Schlüssel kein String ist, sondern ein WordArray (wie in Ihrem Fall), würde ein einfacher encryptedlogin.toString() einen Base64-codierten String erzeugen, der nur den Chiffretext enthält. Denken Sie daran, dass Sie die Quelldatei enc-base64.js einschließen müssen.

Wenn der "Schlüssel" (eigentlich Passwort) eine Zeichenkette ist, dann wird eine OpenSSL-kompatible Schlüsselableitung angewendet. In diesem Fall wäre encryptedlogin.toString() eine Base64-codierte Zeichenfolge, die die Zeichenfolge "Salted__", 8-Byte-Zufallssalz und den Chiffretext enthält.

Wenn Sie nur den Chiffretext erhalten möchten, dann gibt encryptedlogin.ciphertext.toString() Ihnen eine Hex-codierte Zeichenfolge, die nur den Chiffretext enthält, und encryptedlogin.iv.toString() wird Ihnen eine Hex-codierte IV geben. Sie können auf diese Weise eine Base64-codierte Zeichenfolge erstellen encryptedlogin.ciphertext.toString(CryptoJS.enc.Base64).

Denken Sie daran, dass die IV für jede Verschlüsselung nach dem Zufallsprinzip ausgewählt werden muss, um semantische Sicherheit zu gewährleisten. Es muss nicht geheim sein, also können Sie es zusammen mit dem Geheimtext senden.

Auf der Serverseite würden Sie die Werte decodieren (Base64 oder Hex, je nachdem, was Sie während der Verschlüsselung verwendet haben) und sie mit der AesCryptoServiceProvider-Klasse (oder ähnlich) verwenden, um den Chiffretext zu entschlüsseln.


Denken Sie daran, dass Sie zusätzlich Ihre verschlüsselten Text, um authentifizieren müssen (bösartige) Manipulation zu erkennen. Dies kann mit einem Encrypt-then-MAC-Schema mit einem starken MAC wie HMAC-SHA256 geschehen.

Auch wenn der Schlüssel zusammen mit dem Chiffretext oder über einen unsicheren Kanal übertragen wird, ist dies im Grunde nur Datenverschleierung und bietet keine echte Sicherheit. Mehr Infos: Javascript Cryptography Considered Harmful

-1

überprüfen pls https://social.msdn.microsoft.com/Forums/vstudio/en-US/47800a60-4461-4f8e-a8d1-751fa62c7884/aes-encrypt-in-javascript-and-decrypt-in-c?forum=csharpgeneral

Außerdem sollten Sie CryptoJS v3.1.2 AES Realisierung verwenden, es zu benutzen. Sie können es hier herunterladen: https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/crypto-js/CryptoJS%20v3.1.2.zip

Js Seitencode finden Sie hier: jsfiddle.net/aEKw5/22/

So mit Informationen oben können Sie codieren auf C# Seite, und dekodieren Sie es auf js. oder umgekehrt.