2017-07-26 18 views
-5

単語を暗号化または復号化する機能を記述しました。 解読されたキーが暗号化されたキーと同じではないのはなぜですか?解読されたキーが暗号化されたキーと同じでないのはなぜですか?

function cryptage(action, password) { 
    var method = "AES-256-CBC"; 
    if (action == "encrypt") { 
     var cipher = crypto.createCipher(method, password) 
     var crypted = cipher.update(password, 'utf8', 'hex') 
     crypted += cipher.final('hex'); 
     return crypted; 
    } else if (action == "decrypt") { 
     var decipher = crypto.createDecipher(method, password) 
     decipher.setAutoPadding(false); 
     var decrypted = decipher.update(password, 'hex', 'utf8') 
     decrypted += decipher.final('utf8'); 
     return decrypted; 
    } 
} 

私はvar crypted = cryptage("encrypt", "test")を呼び出し、それを返し

cc1fbd73cb93106c3358636ff619bdbd

私はcryptage("decrypt", crypted)を呼び出すと、それは正確に

テ〜IӠ〜{}を返しますm

テキストはありませんが、なぜですか?

+4

私はあなたのコードをすべて見直しませんでしたが、関数の2番目のパラメータが 'password'で、別の値を指定すると動作しません。 – pedrofb

+4

何かを"暗号化 "するには、* secret *と平文。あなたのアルゴリズムはただ一つの値を受け入れます。それは*暗号化できません*最高でも*エンコーディング*です。 – deceze

+0

戻り値があるため、値は1つのみです。 –

答えて

2

TL; DR =>R EAD TF伊根Mユーザ・マニュアル

nodejs暗号モジュールは、作成したいずれかの暗号を介して、あるいはインスタンスを解読するときに2つのことを提供することを期待CreateCipher/CreateDecipherの2パラメータオーバーロード:メソッド - 使用する実際のopenssl暗号の名前、およびパスワードはEVP_BytesToKeyに入力され、結果は実際の暗号インスタンスのキーバイです。

新しいimplemそれを使用することは必然的に著者による罰につながるはずです...それは安全ではなく、例えばPBKDF2に置き換えなければなりません...もしあなたがドキュメントを読んでいたらこれを知っているでしょう...とにかく...あなたの関数が目的の出力を返さない理由を知りたいのですが...理由は簡単です...

あなたはパスワードとデータと同じ値を提供し、暗号化結果を提供したい場合は...

が単純化された暗号化と復号化機能/式

ENCRYPT(DATA、KEY)を見て作業することはできません=> CIPHERTEXT
DECRYPT(CIPHERTEXT 、KEY)=> DATA

これはかなり対称的な暗号です(AESのように、すべての操作モードとすべてのキーを含むので、...はい... 256ビットのAES暗号ブロック連鎖モードの鍵)

あなたの場合はどうなりますか?あなたがこれを行う:
をあなたは成功のためにそれを注意してください同じ...
ENCRYPT(KEY、KEY)=> CIPHERTEXT
DECRYPT(CIPHERTEXT、CIPHERTEXT)=> GARBAGE

するキーとデータを宣言します暗号化と復号化機能のキーパラメータMUSTあなたのケースでは失敗します。

このように、あなたのアプローチでは、はい...あなたは解読したいのと同じ価値が必要です...あなたの解読関数への入力として...

関連する問題