簡體   English   中英

加密:使用Linux / gcrypt簽名,使用Android / Java驗證

[英]Crypto: Signing with Linux/gcrypt, Verifying with Android/Java

我正在處理一個以十六進制格式獲取字符串,添加8個尾隨0並使用gcrypt對其進行簽名的現有系統。 我正在嘗試制作一個可以驗證簽名的Android版本。 現有系統有效,無法更改。 盡管有很多撓頭,但我無法使android版本正常工作。

兩端在要簽名的數據值,結果簽名的字節和所使用的密鑰上達成共識。 我懷疑錯誤在於所簽名數據的解釋,老實說我不理解。

讓我們說我正在用C ++在Linux端簽署"A5DA123456789B00000000"

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

然后將keydata作為第二個參數傳遞給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();

通過將是錯誤的。

我可以用Java簽名,Java表示簽名很好。 我們在linux中有C代碼,說gcrypt簽名很好。 是否有一些我錯過的涉及pkcs1的晦澀設置? 還是我很想念的東西? 有人知道嗎

提前致謝!

好的,我感謝kroot提供了有關gcrypt行為的重要線索。

對於那些隨機發現這個問題的人,我遇到的問題是代碼以一種奇怪的方式對數據簽名,並且Java中的任何簽名模式都不支持這種方式。 解決方案是改為使用Cipher對象。 簽名無非是私鑰加密的哈希。 要對其進行驗證,請使用相應的公鑰來解密簽名,並將結果與​​正在簽名的數據的哈希進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM