我需要使用AES CBC techinque在純文本上進行加密,但在JavaScript端。基本上我需要加密URL 並通過ajax調用啓動該URL。 URL將要解密的系統是用c#編寫的。所以我必須回覆他們的 用c#編寫的加密方法。我需要在我的JavaScript使用相同的邏輯,這樣的方式就可以很容易地在C#cryptojs在加密後不返回真正的base64字符串
Javascript代碼
var Base64encodedandencryptedtext = "username=abc|password=xyz"
// have a password need to hash on that and then pass into aes encryption function
var hash = CryptoJS.SHA512("234-234-1231"); //password key
var finalhash = hash.toString((CryptoJS.enc.Base64));
Base64encodedandencryptedtext = CryptoJS.AES.encrypt(Base64encodedandencryptedtext ,finalhash)
var Base64encodedkey = Base64.encode("encodedkey");
var baseURL = "https://www.xyz.com/"
var DHINquery = baseURL+"?key="+Base64encodedkey+"&value="+Base64encodedandencryptedtext;
//launch via ajax
$.ajax({
type : 'GET',
async : true,
url : DHINquery,
dataType : 'html',
data : {},
success : function (htmlcontent) {
$("#htmlpage").html(htmlcontent)
}, // end success
complete : function (htmlcontent) {
}, // end complete
error : function (htmlcontent) {
alert("error")
}
});
C#加密進行解密就在自己身邊
string Base64encodedandencryptedtext = "username=abc|password=xyz"
Encrypt(Base64encodedandencryptedtext ,passwordkey, "AES") // call that function
public static string Encrypt(string text, string keyguid, string cryptoService)
{
ICryptoTransform transform;
string text1 = keyguid;
UTF8Encoding enc = new UTF8Encoding();
byte[] bytes = enc.GetBytes(text);
string str = CalculateHashToBase64String(text1, enc, "SHA512");
string s = str.Substring(4, 24);
string str3 = str.Substring(0, 4) + str.Substring(0x1c, 4);
string str4 = str.Substring(0, 4) + str.Substring(28, 12);
string str5 = str.Substring(0, 4) + str.Substring(0x1c, 20);
byte[] rgbKey = enc.GetBytes(s);
string str7 = cryptoService;
byte[] buffer3 = enc.GetBytes(str4);
AesCryptoServiceProvider provider2 = new AesCryptoServiceProvider();
provider2.Padding = PaddingMode.PKCS7;
provider2.Mode = CipherMode.CBC;
provider2.KeySize = 0x100;
transform = provider2.CreateEncryptor(rgbKey, buffer3);
return Convert.ToBase64String(Transform(bytes, transform)); // return the base64 string
}
private static byte[] Transform(byte[] input, ICryptoTransform CryptoTransform)
{
byte[] buffer;
using (MemoryStream stream = new MemoryStream())
{
using (CryptoStream stream2 = new CryptoStream(stream, CryptoTransform, CryptoStreamMode.Write))
{
stream2.Write(input, 0, input.Length);
stream2.FlushFinalBlock();
stream.Position = 0L;
buffer = stream.ToArray();
}
}
return buffer;
}
雖然做調試運行JavaScript的側加密後,我仍然得到base64string,但c#加密base64string和javascript 加密base64string看起來不同。出於這個原因,webservice不能成功地返回數據。
我想知道我正在使用的aes插件沒有做到他們正在做的事情在c#端。
有人知道爲什麼嗎?任何幫助將是一個偉大的投入。
這可能與以下事實有關:_JavaScript_在內部使用_UTF-16_,與頁面的字符編碼無關。另外,_CryptoJS的Base64_二進制安全嗎? –
我們正在研究JavaScript方面。所以我們沒有其他的加密選擇。 – user2920587
有人有什麼想法嗎? – user2920587