Я работаю над проектом, который использует внешний API
, который написан на C#
. В этом API
мне нужно отправить некоторые зашифрованные данные, используя их ключ, который был предоставлен при запуске session
.
Мой проект построен с использованием NodeJS
, поэтому для шифрования я использую модуль CryptoJS
. Во время разговора с разработчиком API он прислал мне код, показывающий, как выполняется шифрование в C#
. Вот код с примером key
и value
для шифрования.
TripleDESCryptoServiceProvider mDes = new TripleDESCryptoServiceProvider();
mDes.Key = Convert.FromBase64String("bv8czu/UPuZg6xNxnJAD/vRtbng9mQZX");
mDes.Mode = CipherMode.ECB;
mDes.Padding = PaddingMode.Zeros;
ICryptoTransform mDesEnc = mDes.CreateEncryptor();
byte[] data = Encoding.UTF8.GetBytes("1"); //value to encrypt
var crypto = Convert.ToBase64String(mDesEnc.TransformFinalBlock(data, 0, data.Length));
Console.WriteLine(crypto);
Это приводит к следующему шифрованию: 3EAaQjY2dgA =
Как вы можно увидеть в коде или при его запуске, шифрование использует 3DES
, режим ECB
, заполнение нулями и ключ, в то время как в формате байтового массива имеет 24 байта.
Поэтому я начал воссоздавать этот код в JavaScript
и закончилось этим:
var CryptoJS = require("crypto-js");
var encryptStringWith3DES = function(toEncrypt, key){
toEncrypt = "1";
key = "bv8czu/UPuZg6xNxnJAD/vRtbng9mQZX";
key = CryptoJS.enc.Utf8.parse(key);
console.log(toEncrypt + " " + key);
var encrypted = CryptoJS.TripleDES.encrypt(toEncrypt, key,{
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.ZeroPadding
}).toString();
console.log(encrypted);
}
И это приводит к следующему шифрованию: dj1byXBV6ug =
Я искал много ответов, но ни один не работал. Я подозреваю, что CryptoJS
получает ключ в качестве параметра и как ключ и данные анализируются.
Кто-нибудь из вас знает, как заставить мой код JS
приводить к тем же зашифрованным данным, что и C#
один?