Почему у меня разные результаты в C # TripleDESCryptoServiceProvider и Cryptojs в JavaScript - PullRequest
0 голосов
/ 22 октября 2019

Прошло 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" в консоли браузера, но почему у меня разные результаты? Я очень ценю вашу помощь!

...