2016-11-16 3 views
1

私はAESを使用してencrpyt用のオンラインツールを使用しています。私は私のモジュールを使用して解読しています。しかし、私は同じ結果を得ることはありません。どうして?NodeJS aes decrypt not working

私は、暗号化のために、これらのツールのいずれかを使用:

これは私が提供されたデータである。

  • をこれはencrpytするテキストです。 Hello World
  • これはパスワードです:U2FsdGVkX19HLG+YDMe3kYl+MYwEMlnC5mK78s3rZZg=

今、私はノードを使用して、それを解読しようとすると、それは私に同じ結果を与えていない:12345

  • これは、ツールの結果です。すべてが

    var crypto = require('crypto'), 
        algorithm = 'aes-128-ctr', 
        password = '12345'; 
    
    module.exports.decrypt=function(text){ 
        var decipher = crypto.createDecipher(algorithm,password) 
        var dec = decipher.update(text,'base64','utf8') 
        dec += decipher.final('utf8'); 
        return dec; 
    } 
    
    text=module.exports.decrypt('U2FsdGVkX1+OOp0KE3lv6qcKQeS/JDFPF8YhgdU131o=') 
    text 
    

    welll作品しかし、私は、AES-192に変更しようと、同じ問題を得ました。


    更新:(zaph応答に基づいて)

    これは、私がここで入力した新しいデータである:https://www.tools4noobs.com/online_tools/encrypt/

    • キー:ABCDEF(16バイト)ラインダール-128を。モード:CBC。エンコード:16進数。
    • これが結果です:私はそれを解読することはできません8b25e846b6a2d52ad87f38f8134906c3

    。ここに私のコードは次のとおりです。

    var crypto = require('crypto'), 
        algorithm = 'aes-128-cbc', 
        password = 'abcdef'; 
    
    module.exports.decrypt=function(text){ 
        var decipher = crypto.createDecipher(algorithm,password) 
        var dec = decipher.update(text,'hex','utf8') 
        dec += decipher.final('utf8'); 
        return dec; 
    } 
    if(!module.parent){ 
        var text=module.exports.decrypt('8b25e846b6a2d52ad87f38f8134906c3') 
        console.log(text) 
    } 
    
  • 答えて

    1

    は(間違った長さの鍵の取り扱いに関する標準が存在しない)非標準のパディングを回避するために、正確な長さである暗号化キーを使用してください。 AESは128 192および256ビット長のパスワード(16,24および32バイト)をサポートしています。明らかに12345は、サポートされているパスワードの長さを満たしていません。

    CTRモードを使用しないのが一般的ですが、間違っているのは非常に簡単です。問題は、同じキーとカウンタはと決してを再利用する必要があるということです。一般にCBCモードはランダムIVで使用され、PKCS#7パディングはブロックサイズの倍数ではない入力に対応するために使用されます。

    出力U2FsdGVkX19HLG+YDMe3kYl+MYwEMlnC5mK78s3rZZg=は、ブロックサイズの2倍のBaseエンコード32バイトです。したがって、出力には暗号化されたデータ以外のものがあります。

    CTRモードでRijndael-128(AES)のhttps://www.tools4noobs.com/online_tools/encrypt/にパスワードとテキストを入力すると、質問ではなく、53TI1is8kfYkztQ=が生成されます。このツールは非標準パディングのみをサポートするmcryptを使用していたことに注意してください。

    +0

    は、情報をありがとうございました。私がやっていることは、それをNodeJSで復号化することはできません。私は、ウェブサイトにこのデータを置く:ABCDEF(16バイト)はRijndael-128:キーを使います。モード:CBC。エンコード:16進数。これが結果です:8b25e846b6a2d52ad87f38f8134906c3 – Aminadav

    +0

    この私のコード:http://pastebin.com/MBpz1vL1私は、ウェブサイトでの暗号化データを復号化することはできません。どうして? CBCモードでは – Aminadav

    +0

    あなたはまた、16バイトのIVを提供する必要があります。 – zaph

    0

    これはNodeJSのAES-256で暗号化と復号化を行うための最終コードです。IVを使用して、そしてkeypassword)。

    var crypto = require('crypto') 
    var algorithm = 'aes-128-cbc' 
    var key = 'AABBBBBBBBBBBBBBBBBBBBBBBBBBBBBB' 
    var iv = 'AABBBBBBBBBBBBBBBBBBBBBBBBBBBBBB' 
    
    key=new Buffer(key,'hex') 
    iv=new Buffer(iv,'hex') 
    
    module.exports.encrypt=function(text){ 
        var cipher = crypto.createCipheriv(algorithm,key,iv) 
        text=new Buffer(text) 
        var crypted = cipher.update(text,'utf-8','base64') 
        crypted += cipher.final('base64'); 
        return crypted; 
    } 
    
    module.exports.decrypt=function(text){ 
        var decipher = crypto.createDecipheriv(algorithm,key,iv) 
        dec = decipher.update(text,'base64','utf-8'); 
        dec += decipher.final(); 
        return dec; 
    } 
    if(!module.parent){ 
        var enc=module.exports.encrypt('Exaxmple of encoding') 
        console.log(enc) 
        var dec=module.exports.decrypt(enc) 
        console.log(dec) 
    }