1

Node.jsAPIがあります。キーを使用してAES-192(ECB)を介して暗号化された1つのアイテムを含む「親」APIに対してSOAP呼び出しを行う必要があります。ネイティブ暗号ライブラリを使用しようとしていますが、取得した値が期待している値と一致しません。

仕様から:

[文字列]の暗号化は、AES(NIST FIPS-197)を使用して行われます。16進エンコードを使用した192ビット暗号化。PKCS5PaddingでECBフィードバックモードを使用します。IVも塩漬けも使用されていません。

率直に言って、私はそのほとんどを調べなければなりませんでしたが、それでも役に立ちませんでした。時々、本当に安全である必要のないものをmd5したり、安全である必要のないものを共有したりすることを除けば、私は暗号化をあまり行ったことがないので、少し行き詰まっています。これが私がこの時点で持っているものです:

var cipher = require( 'crypto' ).createCipher( 'aes192', datasources.api.auth.encryptionKey )
cipher.update( data.encryptable )
cipher.final( 'hex' )

で入力および出力エンコーディングのさまざまなバリエーションを試しましたが、cipher.update()期待する値に一致させることができませんでした。

このようなものに精通している人は、私を正しい方向に向けることができますか?この時点で、私は自分の知識を使い果たし、試行錯誤を繰り返しました。

アップデート

私がこれまでに持っているものの詳細:

var crypto  = require( 'crypto' );
var cipher  = crypto.createCipher( 'aes-192-ecb', datasources.api.auth.encryptionKey );
var crypted = cipher.update( 'DSS9676155', 'binary', 'hex' );
crypted     += cipher.final( 'hex' );

console.log( 'CRYPTED:  ' + crypted );
console.log( 'EXPECTED: 72989ABBE3D58AE582EF0EA669EDE521' );

興味深いことに(?)、メソッドcryptedに送信する入力と出力のエンコード値の組み合わせに関係なく、同じ値(164fb25126c444031780c78d098fa877)を取得しupdate()ます。それは私が何か非常に間違ったことをしたことを明確に示しているように見えますが、私はそれを見ることができません。

アップデート

APIプロバイダーからこれを受け取りました。次のようにPythonを使用してテキストを暗号化します。

import sys
import chilkat

crypt = chilkat.CkCrypt2()

password = "thisIsWhereTheKeyGoes"

crypt.put_CryptAlgorithm("aes")
crypt.put_CipherMode("ECB")
crypt.put_KeyLength(192)
crypt.SetEncodedKey(password,"base64")

crypt.put_EncodingMode("hex")
text = "The string to be encrypted"

encText = crypt.encryptStringENC(text)

print encText

コードを次のように更新しました。

var crypto    = require( 'crypto' );
var base64pwd = new Buffer( datasources.api.auth.encryptionKey ).toString( 'base64' );
var cipher    = crypto.createCipher( 'aes-192-ecb', base64pwd );
var crypted   = cipher.update( 'DSS9676155', 'utf8' );
crypted       += cipher.final( 'hex' );

console.log( 'CRYPTED:  ' + crypted );
console.log( 'EXPECTED: 72989ABBE3D58AE582EF0EA669EDE521' );

私はまだ予想とは異なる結果です。繰り返しますが、私は入力/出力エンコーディングのいくつかのバリエーションを試しました。

4

3 に答える 3

0

次のコードは私にとってはうまくいきます:

var crypto  = require( 'crypto' );
var cipher  = crypto.createCipheriv('aes-256-cbc', DATA_CRYPT_KEY, DATA_CRYPT_IV);
var crypted = cipher.update(JSON.stringify(result),'utf8','hex');
crypted    += cipher.final('hex');

res.send(crypted);
于 2013-02-01T13:46:19.463 に答える
0

どんなに価値があっても、プロバイダーが期待したのと同じ値を Node.js にキックバックさせることはできませんでした。最終的に、彼らが使用するのと同じプロセスを使用して Python スクリプトを作成し、Node アプリにそれを呼び出させました。これは完全なハックですが、少なくとも機能します。

この質問にラッパーを置きたかったので、永遠に開かれたままにならないようにしました。

于 2013-02-07T01:52:32.963 に答える