目次
質問内容
解決策は何ですか?
回避策
ホームページ バックエンド開発 Golang hmac.New(h func() hash.Hash, key byte) JavaScript での hash.Hash と同等

hmac.New(h func() hash.Hash, key byte) JavaScript での hash.Hash と同等

Feb 09, 2024 am 08:12 AM
overflow

hmac.New(h func() hash.Hash, key byte) hash.Hash 在 JavaScript 中等效

PHP では、データのセキュリティを保護するために暗号化アルゴリズムを使用する必要があることがよくあります。 HMAC (ハッシュベースのメッセージ認証コード) は、データの整合性と ID 認証を検証するために一般的に使用される暗号化アルゴリズムです。 PHP では、hmac.New() 関数を使用して HMAC インスタンスを作成できます。これには、ハッシュ関数とキーを指定する必要があります。同様に、JavaScript では、同等のメソッドを使用して同じ機能を実現できます。この記事では、JavaScript で同等のメソッドを使用して HMAC インスタンスを作成する方法と、PHP と JavaScript の間でデータを暗号化および復号化する方法を説明します。

質問内容

go lang hmac.newのjs実装で数日間行き詰まりそうになりました。しかし、成功はありませんでした。実装には cryptocrypto-jsstablelib モジュールを使用します。問題は、go lang バージョンでは、hmac インスタンスから hmac インスタンスを作成できることです。例: (コード ブロックは正しく、テスト済みです):

リーリー

実のところ、私もそれがどのように機能するのか知りません!すべての JavaScript 関連モジュールでは、hmac から hmac を作成できず、ハッシュ アルゴリズムを決定する string 値を受け入れるためです。

JavaScript で hmac から hmac を作成する方法を尋ねたほうがよいかもしれません。

解決策は何ですか?

go バージョンの出力が実装の出力と同じである場合、その解決策は正しいです。

回避策

仕様 (rfc 2104) に従って、hmac は sha256 などのダイジェスト関数を内部で使用します。

ただし、実装では、ダイジェストの代わりに別の hmac を内部で使用する hmac が適用されます (実際には互換性がありません)。ここで、最下位レベルの hmac のみが内部で通常のダイジェストを使用します。これにより、入れ子構造が作成されます。

通常の hmac (ダイジェスト付き) の仕様に基づいて、これを go コードで使用される hmac (ダイジェストの代わりに) を使用した hmac に拡張できます。

hmac(k xor opad, hmac(k xor ipad, text)) s. rfc2104、セクション 2。 hmac

の定義

仕様との違いにより、このような機能をそのままサポートする JavaScript ライブラリを見つけるのはそれほど簡単ではないかもしれません。
ほとんどのライブラリは確かに hmac をサポートしていますが、nodejs の暗号化モジュールの crypto.createhmac() などのダイジェスト (hmac ではない) のみを指定できます。 その他の回答 も参照してください。 。このアプローチは、Go コードでロジックを実装するために使用できるとは思いません。

他の回答のアプローチが機能せず、必要な機能を備えた別の JavaScript ライブラリが見つからない場合は、hmac の仕様が比較的単純であるため (上記を参照)、JavaScript でロジックを自分で実装できます。

次のコードは、nodejs の暗号モジュールの実装例です:

リーリー ###結果:### リーリー ###テスト:###

次の go コードは同じ結果を生成します:

リーリー ######編集:######

この記事

からインスピレーションを得た、よりコンパクト/効率的な

hmac_rec()

の実装です。これは、通常の最後の反復ステップに hmac を使用します (これにより、

gethash( )### 廃止): ### リーリー

以上がhmac.New(h func() hash.Hash, key byte) JavaScript での hash.Hash と同等の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

2009 年から 2025 年の誕生以来のビットコインの価格 BTC 過去の価格の最も完全な概要 2009 年から 2025 年の誕生以来のビットコインの価格 BTC 過去の価格の最も完全な概要 Jan 15, 2025 pm 08:11 PM

2009 年の誕生以来、ビットコインは暗号通貨の世界のリーダーとなり、その価格は大きな変動を経験しました。包括的な歴史的概要を提供するために、この記事では 2009 年から 2025 年までのビットコイン価格データをまとめ、主要な市場イベント、市場センチメントの変化、価格変動に影響を与える重要な要因を取り上げます。

ビットコインの誕生以来の歴史的な価格の概要。ビットコインの歴史的な価格動向を完全にまとめています。 ビットコインの誕生以来の歴史的な価格の概要。ビットコインの歴史的な価格動向を完全にまとめています。 Jan 15, 2025 pm 08:14 PM

暗号通貨としてのビットコインは、その誕生以来、市場の大きな変動を経験してきました。この記事では、読者がビットコインの価格傾向と重要な瞬間を理解できるように、誕生以来のビットコインの歴史的な価格の概要を提供します。ビットコインの過去の価格データを分析することで、その価値に対する市場の評価やその変動に影響を与える要因を理解し、将来の投資決定の基礎を提供することができます。

ビットコインBTC歴史的価格動向チャートの誕生以来の歴史的価格のリスト(最新の要約) ビットコインBTC歴史的価格動向チャートの誕生以来の歴史的価格のリスト(最新の要約) Feb 11, 2025 pm 11:36 PM

2009年の作成以来、ビットコインの価格はいくつかの大きな変動を経験し、2021年11月に69,044.77ドルに上昇し、2018年12月に3,191.22ドルに減少しました。 2024年12月の時点で、最新の価格は100,204ドルを超えています。

2018-2024 USDのビットコインの最新価格 2018-2024 USDのビットコインの最新価格 Feb 15, 2025 pm 07:12 PM

リアルタイムのビットコインUSD価格 ビットコインの価格に影響を与える要因 将来のビットコイン価格を予測するための指標 2018年から2024年のビットコインの価格に関する重要な情報を次に示します。

CSSを介してサイズ変更シンボルをカスタマイズし、背景色で均一にする方法は? CSSを介してサイズ変更シンボルをカスタマイズし、背景色で均一にする方法は? Apr 05, 2025 pm 02:30 PM

CSSでサイズ変更シンボルをカスタマイズする方法は、背景色で統一されています。毎日の開発では、調整など、ユーザーインターフェイスの詳細をカスタマイズする必要がある状況に遭遇することがよくあります...

H5ページの生産はフロントエンド開発ですか? H5ページの生産はフロントエンド開発ですか? Apr 05, 2025 pm 11:42 PM

はい、H5ページの生産は、HTML、CSS、JavaScriptなどのコアテクノロジーを含むフロントエンド開発のための重要な実装方法です。開発者は、< canvas>の使用など、これらのテクノロジーを巧みに組み合わせることにより、動的で強力なH5ページを構築します。グラフィックを描画するタグまたはJavaScriptを使用して相互作用の動作を制御します。

フレックスレイアウトの下のテキストは省略されていますが、コンテナは開かれていますか?それを解決する方法は? フレックスレイアウトの下のテキストは省略されていますが、コンテナは開かれていますか?それを解決する方法は? Apr 05, 2025 pm 11:00 PM

フレックスレイアウトとソリューションの下でのテキストの過度の省略によるコンテナの開口部の問題が使用されます...

CSSのクリップパス属性を使用して、セグメルターの45度曲線効果を実現する方法は? CSSのクリップパス属性を使用して、セグメルターの45度曲線効果を実現する方法は? Apr 04, 2025 pm 11:45 PM

セグメントターの45度の曲線効果を達成する方法は?セグメンテーションデバイスを実装する過程で、左ボタンをクリックすると、適切な境界線を45度の曲線に変える方法とポイント...

See all articles