2014-09-15 5 views
7

Я использую Crypto библиотеку Node.js для шифрования/дешифрования следующим образом:Ошибка handeling при помощи Crypto в Node.js

encrypt = function(text, passPhrase){ 
     var cipher = crypto.createCipher('AES-128-CBC-HMAC-SHA1', passPhrase); 
     var crypted = cipher.update(text,'utf8','hex'); 
     crypted += cipher.final('hex'); 
     return crypted; 
    } , 

    decrypt = function(text, passPhrase){ 
     var decipher = crypto.createDecipher('AES-128-CBC-HMAC-SHA1', passPhrase) 
     var dec = decipher.update(text,'hex','utf8') 
     dec += decipher.final('utf8'); 
     return dec; 
    } 

Там нет никаких проблем с шифрованием части. и если я отправлю правильный passPhrase для дешифрования, то проблем нет. Моя проблема в том, если я посылаю «неправильный» PassPhrase для дешифровки, код паузами и выдаст ошибку:

TypeError: Bad input string 
    at Decipher.Cipher.update (crypto.js:279:27) 
    at module.exports.decrypt (/xxxx/yyyyy/jjj/ssss/encryptionService.js:19:28) 
    at Object.module.exports.passwordDecryptor (/xxxx/yyyyy/jjj/ssss/encryptionService.js:59:56) 
    at Object.<anonymous> (/xxxx/yyyyy/jjj/ssss/test.js:32:33) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 

Я не хочу это. Я хочу, например, decrypt Функция возвращает предложение «Пропустить неверную фразу». Согласно документации enter link description herecreateDecipher функция не принимает функцию обратного вызова. У кого-нибудь есть решение?

+0

У меня тоже есть эта проблема. В библиотеке crypto не обрабатывается ошибка? – Costa

ответ

8

Я решил проблему с try и catch. (Функция обратного вызова не работает.)

decrypt = function(text, passPhrase){ 
     var decipher = crypto.createDecipher('AES-128-CBC-HMAC-SHA1', passPhrase); 
     try { 
      var dec = decipher.update(text,'hex','utf8'); 
      dec += decipher.final('utf8'); 
      return dec; 
     } catch (ex) { 
      console.log('failed'); 
      return; 
     } 
    } 
+0

вместо console.log() вы можете создать ошибку, бросить ее и поймать в другом месте в вашем коде. – Danial

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