2014-11-08 136 views
0

即時嘗試在c#中封裝一個有效載荷。
我有Javascript中的代碼,並試圖在C#中創建相同的加密,很難重新創建相同的加密。創建像cryptoJS C#256位AES加密

給出javascript代碼(不能修改):

var data = 
    { 
     'username':username, 
     'password':password, 
     'isPersistent':'false' 
    }; 
var encrypted = CryptoJS.AES.encrypt(JSON.stringify(data),token, { format: JsonFormatter }); 

    var body = { 
     payload: JSON.parse(encrypted.toString()), 
     token: token 
    } 
    debugger 
    $.post(url, body).success(resultFunction) 

我想創建在C#中相同的加密

Dictionary<string, string> data = new Dictionary<string, string>(); 
data.Add("username", username); 
data.Add("password", password); 
data.Add("isPersistent", "false"); 
string token = "7e4bac048ef766e83f0ec8c079e1f90c2eb690a9"; 
string serializedData = json_serialize(data); 
string encrypted = EncryptText(serializedData, token); 
Dictionary<string, string> body = new Dictionary<string, string>(); 
body.Add("payload", json_deserialize(encrypted)); 
body.Add("token", token); 
var loginWebRequest = createWebRequest(address, "POST", json_serialize(body)); 

我這裏有幾個問題,在JS你可以指定加密格式,然後使用JSON.parse。它看起來不能在c#中完成。
我使用了http://www.codeproject.com/Articles/769741/Csharp-AES-bits-Encryption-Library-with-Salt的方法。
有無論如何,我可以在C#中創建相同的代碼片段?

謝謝!

+0

即從CodeProject C#代碼使用PBKDF2來導出密鑰和IV。所以你也需要在CryptoJS中使用PBKDF2。 CryptoJS默認使用OpenSSL來派生密鑰和IV(請參閱[this](http://crypto.stackexchange.com/questions/19739/does-googles-crypto-js-aes-encryption-use-pbkdf2-as-default)後)。 – Dmitry 2014-11-08 16:48:03

+0

@Dmitry javascript代碼給出我不能改變它,我需要在c#中創建相同的代碼片段 – 2014-11-08 17:36:28

回答

2

該帖子中的代碼:openssl using only .NET classes與CryptoJS AES兼容。

測試:

JS:

var encrypted = CryptoJS.AES.encrypt("abc12345","7e4bac048ef766e83f0ec8c079e1f90c2eb690a9"); 
encrypted.toString(); //output: "U2FsdGVkX18eGD2hSe9UyGgTk5NGKFmvWq/3c5IYHoQ=" 

C#:

var p = new Protection(); 
var s = p.OpenSSLDecrypt("U2FsdGVkX18eGD2hSe9UyGgTk5NGKFmvWq/3c5IYHoQ=", "7e4bac048ef766e83f0ec8c079e1f90c2eb690a9"); 
Console.WriteLine(s);//output: "abc12345"