goプログラム(https://github.com/mckael/samtv)をnode.jsに移植しようとしています。 「smartview」API は Samsung TV を制御します
プログラムには「aes 暗号化」機能があり、ノードに移植する際に問題があります。
リーリー私が現在直面している問題は、どのアルゴリズムを使用すればよいか、または「初期ベクトル」の取得元を node.js 関数のどこに指定する必要があるかがわからないことです。 リーリー
代わりにcrypto.createcipher(...) を使用できますか?しかし、それは非推奨になっており、パディング機能が重要であるように感じられます。
注: go 関数では、
s.sessionkey は、node.js
Solution
の
キー サイズから派生します (例: 16 バイト キーの場合は aes-128)。暗号文は []byte として返されます。
nodejs コードでは、aes バリアントとモードが明示的に指定されています (
など)。 ecb モードは IV を適用しないため、createcipheriv()
で null
として指定する必要があります。パディング pkcs#7 (デフォルト) を使用します。暗号文は、[]byte
に最も近い buffer
として返されます。
公開されたキー
は 16 進数でエンコードされたキーのように見えます。16 進数でデコードされた 16 バイトの大きさであるため、aes-128 に対応します。 16 進デコードは、encoding/hex
パッケージを使用して Go で実装できます。たとえば、hex.decodestring("59e8ca4b09f2a19ab5421cf55d604c7c") です。
ecb モードで aes-128 (16 バイト キー) と pkcs#7 パディングを使用した Nodejs コード例:
go コードは、同じキー (16 進デコード) と平文と暗号文の Base64 エンコードを使用して同じ結果を返します。
完全を期すために、キーを utf-8 でエンコードしてから、
key := []byte("59e8ca4b09f2a19ab5421cf55d604c7c") および ## のような 32 バイトのキーを生成することもできます。 code #const session_key =buffer.from("59e8ca4b09f2a19ab5421cf55d604c7c", "utf-8") nodejs コード。 nodejs コードでは、
aes-256-ecb も適用する必要があります。最終的に、キー仕様は、使用するエンコーディングに関する情報を提供する必要があります。
ecb モードは安全ではないことに注意してください。現在では、gcm モードなどで認証された暗号化を使用するのが一般的です。
以上がAES暗号化機能をnode.jsに移植の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。