을 사용하여 암호화 된 데이터의 암호를 해독합니다. 지금 도움을 필요로하는 문제가 있습니다.node.js를 사용하여 C#
나는 C#을 사용하여 일부 암호화를 수행합니다. 그런 다음 node.js를 사용하여 해독 할 필요가 있습니다. 하지만 난 그냥 내 C# 암호화 알고리즘을 기반으로 정확하게 할 수없는 것으로 나타났습니다. 너희들이 해결책이 있다면 나를 도와주세요. 누군가가 나에게 nodejs에 대한 동일한 기능을 제공 할 수있는 경우
public static string Encrypt(string text, String password, string salt, string hashAlgorithm, int passwordIterations, string initialVector, int keySize)
{
if (string.IsNullOrEmpty(text))
return "";
var initialVectorBytes = Encoding.ASCII.GetBytes(initialVector);
var saltValueBytes = Encoding.ASCII.GetBytes(salt);
var plainTextBytes = Encoding.UTF8.GetBytes(text);
var derivedPassword = new PasswordDeriveBytes(password, saltValueBytes, hashAlgorithm, passwordIterations);
var keyBytes = derivedPassword.GetBytes(keySize/8);
var symmetricKey = new RijndaelManaged();
symmetricKey.Mode = CipherMode.CBC;
byte[] cipherTextBytes = null;
using (var encryptor = symmetricKey.CreateEncryptor(keyBytes, initialVectorBytes))
{
using (var memStream = new MemoryStream())
{
using (var cryptoStream = new CryptoStream(memStream, encryptor, CryptoStreamMode.Write))
{
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
cryptoStream.FlushFinalBlock();
cipherTextBytes = memStream.ToArray();
memStream.Close();
cryptoStream.Close();
}
}
}
symmetricKey.Clear();
return Convert.ToBase64String(cipherTextBytes);
}
public static string Decrypt(string text, String password, string salt, string hashAlgorithm, int passwordIterations, string initialVector, int keySize)
{
if (string.IsNullOrEmpty(text))
return "";
var initialVectorBytes = Encoding.ASCII.GetBytes(initialVector);
var saltValueBytes = Encoding.ASCII.GetBytes(salt);
var cipherTextBytes = Convert.FromBase64String(text);
var derivedPassword = new PasswordDeriveBytes(password, saltValueBytes, hashAlgorithm, passwordIterations);
var keyBytes = derivedPassword.GetBytes(keySize/8);
var symmetricKey = new RijndaelManaged();
symmetricKey.Mode = CipherMode.CBC;
var plainTextBytes = new byte[cipherTextBytes.Length];
var byteCount = 0;
using (var decryptor = symmetricKey.CreateDecryptor(keyBytes, initialVectorBytes))
{
using (var memStream = new MemoryStream(cipherTextBytes))
{
using (var cryptoStream = new CryptoStream(memStream, decryptor, CryptoStreamMode.Read))
{
byteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
memStream.Close();
cryptoStream.Close();
}
}
}
symmetricKey.Clear();
return Encoding.UTF8.GetString(plainTextBytes, 0, byteCount);
}
, 그 정말 도움이 될 것입니다 :
여기 내 C# 암호화 코드입니다. 어쨌든,이 게시물을 읽어 주셔서 감사합니다.
구문 강조 표시를 확인하십시오. 이것이 규칙을 따르고'UpperCase' 변수 이름을 사용하지 않아야하는 이유입니다. –
너무 조심스럽게 @JonathonReinhart를 청소했다 :) –
죄송합니다 얘들 아, 나는 확실히 다음 번에 청소를 할 것입니다. 내 코드를 청소 해 주셔서 감사합니다. – Zhe