2010-12-21 22 views
8

Node'un kripto kitaplığı ile ilgili çok tuhaf sorunlar yaşıyorum. Node.js ve kripto kitaplığı

var cipher = crypto.createCipher('aes-256-cbc','InmbuvP6Z8') 
var text = "123|123123123123123"; 
cipher.update(text,'utf8','hex') 
var crypted = cipher.final('hex') 
var decipher = crypto.createDecipher('aes-256-cbc','InmbuvP6Z8') 
decipher.update(crypted,'hex','utf8') 
var dec = decipher.final('utf8') 

ben console.log (Aralık) yapmak

, boş: Ben bu basit AES test senaryoyu yazdım. Bazı nedenlerden dolayı "123 | 123123" e test yapsam, işe yarıyor. Peki neden "123 | 123123" çalışıyor ama "123 | 123123123123123" çalışmıyor?

+1

kullanın. Metin için en son çalışma süresi 15 karakter olarak görünmektedir. – Mike

cevap

27

Herşeye sahip olduğunuzdan emin olmak için cipher.final'in yanı sıra cipher.final'den dönüş almanız gerekir.

cipher.update "şifrelenmiş içeriğini döndürür ve akışa gibi yeni verilerle defalarca çağrılabilir":

http://nodejs.org/docs/v0.2.5/api.html#cipher-update-247

cipher.final "kalan şifreli içeriğini döndürür".

ben aynen bu şekilde her çağrıyla sonuçları ekler düşünüyorum:

var crypto = require('crypto'); 
var cipher = crypto.createCipher('aes-256-cbc','InmbuvP6Z8'); 
var text = "123|123123123123123"; 
var crypted = cipher.update(text,'utf8','hex'); 
crypted += cipher.final('hex'); 
var decipher = crypto.createDecipher('aes-256-cbc','InmbuvP6Z8'); 
var dec = decipher.update(crypted,'hex','utf8'); 
dec += decipher.final('utf8'); 

Ben '123 | 123123123123123' kriptolanmis için '12443a347e8e5b46caba9f7afc93d71287fbf11169e8556c6bb9c51760d5c585' get ve düğüm v0.2.5 ile yukarıda Aralık için

+3

RandomEtc doğrudur, node.js'de her şeyin akış için iyi bir şekilde akılda tutulduğunu unutmayın. Karma ve şifreleme işlevleri metne herhangi bir sayı ile güncellenebilir, bu da sadece metne ekler, ancak sonucu elde etmek için bir hash.digest veya cipher.final – Vanwaril

+0

RandomEtc yapmanız gerekir, buna cevabınız için teşekkürler. Sonunda beni kripto şeylerine götürdü! :) –

8

RandomEtc doğru, ama sadece bu soruya tökezleyen herkes kendi kodlaması olarak 'base64' kullanıyor: Yapma.'hex''a yapıştır. En azından 0.4.2'den itibaren, 'base64' kullanıldığında bozuk veriyle sonuçlanabilecek bir hata var. Bkz. https://github.com/joyent/node/issues/738/