我正在从事解密项目。我有一个C#后端代码。基本上我会尝试将此代码转换为javascript。
我正在使用CryptoJS进行加密。顺便说一句,我意识到我指定的是PKCS#7而不是PKCS#5,但是我没有在CryptoJS中找到PKCS#5的库。但是,当我研究此主题时,有人说相同,而有人不同。我花了足够的时间在密码学上,以了解是否是base64,因为我不知道“ c#”,因此可以给您一个很好的答案。我相信是因为我编写的JavaScript代码块几乎可以产生正确的结果。还差几个字符。我将继续比较两者,以查看我的c#代码在做什么,而javascript不是。
这里是c#代码:
public string GenerateKey () {
string EncodeAes (string key, string input) {
var aes = GetCryptoParams (key);
var plainBytes = Encoding.UTF8.GetBytes (input);
return Convert.ToBase64String (AesEncrypt (plainBytes, aes));
}
RijndaelManaged GetCryptoParams (string key) {
var keyBytes = new byte[16];
var secretKeyBytes = Encoding.UTF8.GetBytes (key);
Array.Copy (secretKeyBytes, keyBytes, Math.Min (keyBytes.Length, secretKeyBytes.Length));
var aes = new RijndaelManaged {
Mode = CipherMode.CBC,
Padding = PaddingMode.PKCS7,
KeySize = 128,
BlockSize = 128,
Key = keyBytes,
IV = keyBytes
};
return aes;
}
byte[] AesEncrypt (byte[] plainBytes, RijndaelManaged rijndaelManaged) {
return rijndaelManaged.CreateEncryptor ()
.TransformFinalBlock (plainBytes, 0, plainBytes.Length);
}
return EncodeAes ("qwertyasdfghzxcv", RandomPassword.Generate (16));
}
// POST api/values
[HttpPost]
public HttpResponseMessage GetEncDecText ([FromBody] encRequest req) {
string EncodeAes (string key, string input) {
var aes = GetCryptoParams (key);
var plainBytes = Encoding.UTF8.GetBytes (input);
return Convert.ToBase64String (AesEncrypt (plainBytes, aes));
}
string DecodeAes (string key, string thisDecode) {
var aes = GetCryptoParams (key);
try {
var encryptedBytes = Convert.FromBase64String (thisDecode);
return Encoding.UTF8.GetString (AesDecrypt (encryptedBytes, aes));
} catch {
return null;
}
}
RijndaelManaged GetCryptoParams (string key) {
var keyBytes = new byte[16];
var secretKeyBytes = Encoding.UTF8.GetBytes (key);
Array.Copy (secretKeyBytes, keyBytes, Math.Min (keyBytes.Length, secretKeyBytes.Length));
var aes = new RijndaelManaged {
Mode = CipherMode.CBC,
Padding = PaddingMode.PKCS7,
KeySize = 128,
BlockSize = 128,
Key = keyBytes,
IV = keyBytes
};
return aes;
}
byte[] AesDecrypt (byte[] encryptedData, RijndaelManaged rijndaelManaged) {
return rijndaelManaged.CreateDecryptor ()
.TransformFinalBlock (encryptedData, 0, encryptedData.Length);
}
if (req.type == "dec") {
return Request.CreateResponse (HttpStatusCode.OK, new response () { encText = DecodeAes (req.key, req.text) });
} else {
return Request.CreateResponse (HttpStatusCode.BadRequest);
}
}
我的JavaScript结果始终是空字符串
这是我的JavaScript代码小提琴。 Key和sampleEncryptedText使用c#代码转换对象。但是在此javascript代码中,它总是返回空字符串。
https://jsfiddle.net/ryoshpa/hj3oewty/21/
所以我如何将c#加密的代码转换为Javascript?
(将我的后端代码java编辑为c#)
我会解密使用该代码加密的所有内容,然后将其扔到可能的范围内。然后查找一个好的JS库并重新加密。
问题是:getRawKey
将来必定会失败,由于要使用JS "SHA1PRNG"
,因此需要大量的工作才能使废话在JS中起作用。否则,您必须获取SHA1PRNG的代码并在JS中重新实现。
您已经被警告。