0

私は、16 進形式の文字列を取得し、末尾に 8 個の 0 を追加し、gcrypt を使用して署名する既存のシステムを扱っています。署名を検証できるAndroid版を作ろうとしています。既存のシステムは機能しており、変更することはできません。頭をひっかいても、Androidバージョンを機能させることはできません。

両端は、署名されるデータの値、結果の署名のバイト、および使用される鍵について合意します。エラーは、署名されているデータの解釈にあると思われますが、それは正直わかりません。

"A5DA123456789B00000000" C++ で Linux エンドに署名しているとしましょう。

#define FORMAT "(data\n (flags pkcs1)\n (hash sha1 #%s#))\n"
sprintf(blob, FORMAT, "A5DA123456789B00000000");
gcry_sexp_sscan(&keydata, NULL, blob, strlen(blob));

次に、keydata を 2 番目の引数として に渡しますgcry_pk_sign

Java の android エンドは、これを行います。

Signature sig = Signature.getInstance("SHA1withRSA");
sig.initVerify(pubkey);
BigInteger bigData = new BigInteger("A5DA123456789B00000000", 16);
sig.update(bigData.toByteArray());
boolean pass = sig.verify();

pass は false になります。

私は Java で署名できますが、Java は署名は問題ないと言っています。Linux には、gcrypt 署名に問題がないことを示す C コードがあります。どこかで見逃した pkcs1 に関連するあいまいな設定はありますか? または、私が見逃している明らかなものはありますか?誰でも知っていますか?

前もって感謝します!

4

1 に答える 1