[英]Encryption Method using md5 hash and triple Des encryption in angular 7
我想用angular7实现同样的加密,
下面的 function 在 C# 中,我尝试了 crypto-js 但没有给我相同的结果。
使用 System.Security.Cryptography;
public static string Encrypt(string PlainText, string SecretKey)
{
try
{
byte[] keyArray;
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(PlainText);
var hashMD5 = new MD5CryptoServiceProvider();
keyArray = hashMD5.ComputeHash(UTF8Encoding.UTF8.GetBytes(SecretKey));
hashMD5.Clear();
var triDESProv = new TripleDESCryptoServiceProvider();
triDESProv.Key = keyArray;
triDESProv.Mode = CipherMode.ECB;
triDESProv.Padding = PaddingMode.PKCS7;
var cTransform = triDESProv.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
triDESProv.Clear();
string encText = Convert.ToBase64String(resultArray, 0, resultArray.Length);
return encText;
}
catch
{
return "ERROR";
}
}
而不是您实现的算法,为什么不在 C# 中安装libsodium-net ,在 JavaScript 中安装钠加,并使用crypto_secretbox()
?
Libsodium 的 secretbox 比您上面发布的代码更安全,原因如下:
在每一个方面,secretbox 都更加安全。 对 libsodium 的支持也 几乎无处不在。
我不是这方面的专家,但我能够解决它
.NET - C#
private static readonly string key = "password";
public static string Encriptar(string texto)
{
byte[] keyArray;
byte[] Arreglo_a_Cifrar = Encoding.UTF8.GetBytes(texto);
byte[] ivArray = new byte[8];
//Algoritmo MD5
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
//se guarda la llave para que se le realice hashing
keyArray = hashmd5.ComputeHash(Encoding.UTF8.GetBytes(key));
hashmd5.Clear();
Array.Copy(keyArray, 0, ivArray, 0, 8);
//Algoritmo 3DES
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider
{
Key = keyArray,
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7,
IV = ivArray
};
//se empieza con la transformación de la cadena
ICryptoTransform cTransform = tdes.CreateEncryptor();
byte[] ArrayResultado = cTransform.TransformFinalBlock(Arreglo_a_Cifrar,0, Arreglo_a_Cifrar.Length);
tdes.Clear();
return Convert.ToBase64String(ArrayResultado, 0, ArrayResultado.Length);
}
Angular - 加密JS
encriptarDatos(valor: string) {
var key = CryptoJS.MD5(CryptoJS.enc.Utf8.parse(environment.keyHash));
var iv = {...key};
iv.sigBytes = 8;
var mode = CryptoJS.mode.ECB;
var encrypted = CryptoJS.TripleDES.encrypt(valor, key, { iv, mode }).toString();
console.log('DATO ENC:'+encrypted);
return encrypted;
}
非常重要的是, IV (初始化向量)必须是密钥的一部分,并且在两个框架(Net - Angular)中必须具有相同的大小
我的密码有 10 个字符长,我没有测试其他尺寸
帮助链接:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.