さまざまなユーザーからのデジタル署名を検証するアプリケーションがあります。これらのユーザーは、.NET、JAVA、C など、さまざまな言語/プラットフォームでプログラミングしています。まだ多くのアプリケーションが Erlang/OTP で開発されています。Erlang/OTP プラットフォームから多くのアプリケーションをテストすると、すべてが期待どおりに動作しますが、他のプラットフォームから使用すると失敗します。
これは、署名を検証するためのセクションです。
Signature - Base64 enconded string digital signature as
recieved from users.
SignBinData - is obtained by reconstructing a String (using data
that was md5 digested and used to generate the signature), that is,
SignBinData = term_to_binary(String)
Then verifying the signature using
public_key:verify(SignBinData, md5, base64:decode(Signature), UserPublicKey).
このアプローチを使用して、Erlang/OTP でこの実装をテストします。
- 記載された手順に従って文字列を生成します。
- を使用して文字列をバイナリに変換します
term_to_binary/1
。 - MD5 をダイジェスト タイプとして秘密鍵を使用して、文字列 (バイナリ) にデジタル署名します。(これを確認するために公開鍵を使用します)。
- Base64 で署名出力をエンコードし、base64 でエンコードされた文字列を生成します。この base64 でエンコードされた文字列出力が署名です。
私の問題は、term_to_binary/1
バイナリを管理するために使用する場合、ユーザーはそのことを知らず、とにかく適用できないため、Java のような独自の適用可能なメソッドを使用することです。
... some left out code ...
String s = SignatureStringData;
byte[] data = s.getBytes("UTF-8");
signature.update(data);
byte[] digitalSignature = signature.sign();
デジタル署名を生成しますが、検証が不可能であることがわかりました。
私の質問は、Erlang で実装している方法は、Erlang の他のすべてのプラットフォームからのデジタル署名を処理するための普遍的な方法ですか、それとも別の方法があり、これは Erlang/OTP ユーザーのみに適用されますか? ありがとうございました。