2017-09-01 10 views
1

私は同じアルゴリズムを使って同じキーとIVで文字列を暗号化します。しかし、結果は異なります。 openssl_encryptはノードとは別のパディングスキームを使用していますか?ノードとPHPと異なるAES暗号

ノード

const crypto = require('crypto'); 

var passphrase = '29486a7a37664140'; 
var iv = '76e69938cdf5bb64'; 
var text = '123456789'; 

var cipher = crypto.createCipheriv('aes-128-ctr', passphrase, iv) 
var crypted = cipher.update(text,'utf8','hex') 
crypted += cipher.final('hex'); 

var result = crypted + ':' + iv; 

console.log('crypted: (' + crypted.length + ' chars)', crypted); 
// crypted: (32 chars) b94107e56900ec8270a847bbf457eaa6 

PHP

<?php 

$encrypt_method = "AES-128-CTR"; 
$passphrase = '29486a7a37664140'; 
$iv = '76e69938cdf5bb64'; 
$text = '123456789'; 

$encrypted = openssl_encrypt($text, $encrypt_method, $passphrase, 0, $iv); 

echo 'crypted (' . strlen($encrypted) . ' chars): ' . $encrypted; 
// crypted (24 chars): uUEH5WkA7IJwqEe79Ffqpg== 
?> 

答えて

1

オーケー、よく...愚かな。エンコーディングの問題:

bas64を使用するように私のノードの一部を変更するには、ソリューションを投稿する時間を割いて

var cipher = crypto.createCipheriv('aes-128-ctr', passphrase, iv) 
var crypted = cipher.update(text,'utf8','base64') 
crypted += cipher.final('base64'); 
+0

おかげで動作します – BeetleJuice