2013-11-26 4 views
0
var cardInfo = "<Card><CVV></CVV><CardNumber></CardNumber><ExpMonth></ExpMonth><ExpYear></ExpYear><Member></Member></Card>" 

function genKeyPair(passphrase){ 
    var iv = crypto.createHash('md5').update(passphrase).digest('hex').substring(0, 8) 
    var key = crypto.createHash('md5').update(passphrase).digest('hex').substring(0, 24) 
    return { 
     key: key, 
     iv: iv 
    } 
} 

function encrypt3DES(key, vector, data){ 
    var encryptor = crypto.createCipheriv('des3', key, vector) 
    var raw = new Buffer(data) 
    encryptor.update(raw) 
    var encrypted = encryptor.final() 
    return encrypted 
} 

function decrypt3DES(key, vector, data){ 
    var decryptor = crypto.createDecipheriv('des3', key, vector) 
    decryptor.update(data) 
    var decrypted = decryptor.final() 
    return decrypted 
} 

var key = genKeyPair('test') 
var data3DES = encrypt3DES(key.key, key.iv, cardInfo) 
var decryptedCard = decrypt3DES(key.key, key.iv, data3DES) 

Итак, я получаю «плохой расшифровать» на decryptor.final() и не могу понять, почему.Плохой дешифрование при реализации NodeJS Triple DES?

  1. Node ожидает буфер при шифровании, так что вы видите, что предусмотрено, что в начале encrypt3DES
  2. Я положил необработанный выходной буфер из шифрования прямо в методе расшифровка

Что я делаю Неправильно здесь?

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ Нет, это не будет использоваться в производстве. Я просто играл вокруг так, пожалуйста, держите с «вы не знаете, что вы делаете, чтобы вы не должны делать это» говорить

ответ

1

Результаты update выбрасываются в вашем коде:

Возвращает зашифрованное содержимое и может быть вызвано много раз с новыми данными по мере его потока.

В коде также используются клавиши 3DES ABC, которые не содержат достаточной энтропии (ключи должны быть двоичными данными, а не шестнадцатеричными). По крайней мере, попробуйте использовать crypto.createCipher(algorithm, password) или попробуйте найти реализацию PBKDF2 в JavaScript.

+0

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

+0

Я внимательно прочитал документы CryptoJS, и я * считаю, что вы ошибаетесь. Вы ** пробовали ** мое решение, прежде чем вы дали этот комментарий? Я думаю, что вместо этого вы должны использовать метод 'write' или' read', если хотите использовать их как потоки. Я не думаю, что они * поглощают * или * источники *. –

+0

Да, в первый раз я фактически использовал собственный API потоков (прослушивание данных и завершение, fire stream.end с входными данными). Я собираюсь дать ему еще несколько снимков, и если вы правы, я обязательно вернусь и отметю правильно :-) –

Смежные вопросы