2017-01-14 3 views
1

よりもノードで異なる働き、そして、私は、Python、PerlやPHPでいくつかの作業例を発見した、と私はノードで同等のコードを書きました私は問題に遭遇しました。 Nodeのbase64デコーダは他の3つの言語と同じように動作しないようです。 PythonでPerlでbase64でデコードは私が認証文字列のためにbase64でトークンをデコードする必要がPHPやPerlやPython

my $token = 'BaSe64sTRiNghERe'; 
my $decoded_token = decode_base64($token); 
print $decoded_token; 

戻ってこれを実行する

token = 'BaSe64sTRiNghERe' 
decoded_token = token.decode('base64') 
print decoded_token 

戻り、この文字列

???のF# `?D^

これを実行する

th文字列

???のF# `?D^

これを実行するPHP

$token = 'BaSe64sTRiNghERe'; 
$decoded_token = base64_decode($token, true); 
echo $decoded_token; 

戻り、この文字列

??? F#が`?D ^です

、最終的には、ノードのスクリプトで

var token = 'BaSe64sTRiNghERe', 
decoded_token = Buffer.from(token, 'base64').toString(); 
console.log(decoded_token); 

戻り、この文字列

????のF#を `これを実行している?D^

質問がある

、なぜ余分に疑問符デコードされた文字列で? Perl、Python、PHPのようにNodeで同じ結果を得るにはどうしたらいいですか?

UPDATE

コマンドライン

echo BaSe64sTRiNghERe | base64 --decode 

でこれを実行すると、私はPerlやPythonとPHPスクリプト

が、ノード

から同じコマンドを実行するのと同じ出力を提供します
var exec = require('child_process').exec; 
exec('echo BaSe64sTRiNghERe | base64 --decode', function callback(error, stdout, stderr){ 
    console.log(stdout); 
}); 

I S間違ったものを得るまで。あなたが印刷できない文字を生成しており、ノードは他の言語とは異なるものを印刷できない文字を扱うように見えるので、

+1

実際のトークンで試しましたか? 'QmFTZTY0c1RSaU5naEVSZQ ==' - それはまた、上の 'BaSe64sTRiNghERe' – furas

答えて

0

出力が異なっています。また、情報が失われています。

>>> token = 'BaSe64sTRiNghERe' 
>>> decoded_token = token.decode('base64') 
>>> print decoded_token 
???F#`?D^ 
>>> decoded_token[0] == decoded_token[1] 
False 

あなたはこのように見えるためにあなたのpythonスニペットを変更する場合:

import binascii 
token = 'BaSe64sTRiNghERe' 
decoded_token = binascii.hexlify(token.decode('base64')) 
print(decoded_token) 

次に、あなたのnodejsはこのように見えるようにスニペット変更:

var token = 'BaSe64sTRiNghERe', 
decoded_token = Buffer.from(token, 'base64').toString('hex'); 
console.log(decoded_token); 

必要になります印刷できない文字を処理する方法の違いを避け、base64デコードが同じバイト値を持つことを確認してください。

+0

を与えるデコードした後、私はこの 'キー= decoded_tokenの行う必要があります[:5] テキスト= 'ここでの連結データ' ダイジェスト= hmac.new(キー、テキスト、hashlib.sha1).digest() 印刷digest.encode( '進') '' キー= decoded_token.substr(0であるノードにおける 等価物、5)。 text = 'ここに連結データ'; digest = crypto.createHmac( 'sha1'、key).update(text).digest( 'hex'); console.log( 'digest'、digest) ' そして、異なる16進値を出力します。 (同じキーを使ってhmacを作成した場合、16進値は同じです) –

+0

@klaooz上記の更新された答えが見えましたか? – davejagoda

関連する問題