Прошло 2 дня, и я до сих пор не могу решить эту проблему. Можете ли вы помочь мне с этим? У меня есть как сообщения и ключ такие же, как в C # и яваскрипт
C # сообщения = QXV0b3N3ZWVwMkdvMTpKdWFuOjIwMTkxMDIyMTE1MToxMjM0NTY3OA ==
расслоения плотного сообщения = QXV0b3N3ZWVwMkdvMTpKdWFuOjIwMTkxMDIyMTE1MToxMjM0NTY3OA ==
1007 * C # ключевыми= YUbK78VWzJslL7xW36VnbQcQUmssFQzB
1009 * расслоение плотной ключ = YUbK78VWzJslL7xW36VnbQcQUmssFQzB
C # IV = WJ + 7BWTXe2Y =
JS IV = WJ + 7BWTXe2Y =
1015
Но результатыявляются:
C # = Tv8vp + eFWSuhBUCadSYg6XdKz5m11UDJjpfOaPQwQDxpHwSOQa8OSwIQXpKcUhUH
тысяча двадцать-один * JS = U2FsdGVkX19pqfWg0oBW3WyPU7zl7IqKmLX86x346oEbMGCv1y0JJSHTmwI / 945TFlBIq8EhbtbQK3XZIpjyc0HhFZi6ijELodx0e64 + Ua0 =
Это реализация в C #
public static string EncryptTxt(string key, string msg, CipherMode mode, Int16 KeyOffSet)
{
SHA512CryptoServiceProvider sha = new SHA512CryptoServiceProvider();
byte[] newKey = new byte[23];
using (var tdes = new TripleDESCryptoServiceProvider())
{
byte[] Results;
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(key));
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
byte[] keybyte = sha.ComputeHash(Encoding.UTF8.GetBytes(key));
byte[] newKeyx = new byte[24];
Array.Copy(keybyte, KeyOffSet, newKeyx, 0, newKeyx.Length);
byte[] xx = new byte[] {88, 159, 187, 5, 100, 215, 123, 102};
TDESAlgorithm.Key = newKeyx;
TDESAlgorithm.Mode = mode;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
TDESAlgorithm.IV = xx;
byte[] DataToEncrypt = UTF8.GetBytes(msg);
try
{
ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
var y = Convert.ToBase64String(DataToEncrypt);
var z = Convert.ToBase64String(newKeyx);
var a = Convert.ToBase64String(xx);
}
finally
{
TDESAlgorithm.Clear();
HashProvider.Clear();
}
var x = Convert.ToBase64String(Results);
return Convert.ToBase64String(Results);
}
}
Это моя реализация в javascript
encryptText = () => {
const msg = 'Autosweep2Go1:Juan:201910221332:12345678';
const iv = crypto.enc.Utf8.parse('fAutosweep2Go1');
const keybyte = this.wordArrayToByteArray(crypto.SHA512(iv), 16);
const newKeyx = new Uint8Array(24);
// creating the iv if needed
const newKeyx1 = new Uint8Array(8);
newKeyx1[0] = 88;
newKeyx1[1] = 159;
newKeyx1[2] = 187;
newKeyx1[3] = 5;
newKeyx1[4] = 100;
newKeyx1[5] = 215;
newKeyx1[6] = 123;
newKeyx1[7] = 102;
const newkeybyte = keybyte.slice(10, 34);
let m: any = this._arrayBufferToBase64(newkeybyte); // the key
m = crypto.MD5(m);
m.words.push(key.words[0], key.words[1]);
const DataToEncrypt = this.wordArrayToByteArray(crypto.enc.Utf8.parse(msg), 40);
const l = this._arrayBufferToBase64(DataToEncrypt); // the message
const o = this._arrayBufferToBase64(newKeyx1); // the iv
const options = {
mode: crypto.mode.ECB,
padding: crypto.pad.Pkcs7,
};
const dteLength = DataToEncrypt.length;
const encrypted = crypto.TripleDES.encrypt(
l,
m,
options);
// view results
const u = encrypted.toString();
const x = crypto.enc.Utf8.parse(encrypted.toString());
const b = crypto.enc.Utf8.stringify(x);
const a = this.wordToByteArray(encrypted.toString(), 48);
const result = this.wordArrayToByteArray(encrypted.ciphertext, dteLength);
console.log(crypto.enc.Base64.stringify(result));
return encrypted;
}
Я вижу результат по переменной "u" в консоли браузера, но почему у меня разные результаты? Я очень ценю вашу помощь!