Превращение зашифрованных данных в строку и обратно - PullRequest
0 голосов
/ 30 мая 2018

Я хотел бы хранить зашифрованные данные в строковом формате.К сожалению, я не могу этого сделать и не понимаю, почему.

По какой-то причине эта строка:

const str = new TextEncoder().encode(buff1); 

создает строку с большим количеством байтов и байтов, отличных от байтов вArraybuffer before.

Конечный результат этого кода состоит в том, что они регистрируются в консоли:
ArrayBuffer {byteLength: 139}
ArrayBuffer {byteLength: 262}

Этопроблема, поскольку они должны были быть похожими, но это не так.Я перепробовал много альтернатив, но все возможные способы сделать это заканчиваются той же самой проблемой.Буду очень признателен, если кто-нибудь подскажет, как это исправить.

Обратите внимание, что функция EncryptText работает так, как должна.Я добавил его только для тех, кто хотел бы запустить код в своей IDE.

async function encryptText(plainText, iv, password): Promise<ArrayBuffer> {
    const ptUtf8 = new TextEncoder().encode(plainText);
    const pwUtf8 = new TextEncoder().encode(password);
    const pwHash = await crypto.subtle.digest('SHA-256', pwUtf8);
    const alg = { name: 'AES-GCM', iv: iv };
    const key = await crypto.subtle.importKey('raw', pwHash, alg, false, ['encrypt']);
    return crypto.subtle.encrypt(alg, key, ptUtf8);
};

async function encrBuffToUtf8Test() {
    const plainData = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, ' +
        'sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.';
    const password = 'infamous';
    const randomValues = crypto.getRandomValues(new Uint8Array(12));

    const encryptionResult1 = await this.encryptText(plainData, randomValues, password);

    const buff1 = Buffer.from(encryptionResult1);
    const str = new TextEncoder().encode(buff1);
    const utf8buff = new TextDecoder('utf-8').decode(buff);
    const encryptionResult2 = utf8buff.buffer;
    const resTest = encryptionResult1 === encryptionResult2;
    if (!resTest) {
        console.log(encryptionResult1);
        console.log(encryptionResult2);
    }
}

1 Ответ

0 голосов
/ 30 мая 2018

Я думаю, что пишу это как ответ почти каждый день, но еще раз, , вы не можете преобразовать произвольные двоичные данные в строку , используя стандартные кодировки символов.Это просто не работает таким образом.

Рассмотрите возможность использования base64 или hex.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...