第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么我用OpenSSL和Java生成的RSA-SHA256簽名不同?

為什么我用OpenSSL和Java生成的RSA-SHA256簽名不同?

慕碼人8056858 2019-10-29 14:25:34
我想用Java生成RSA-SHA256簽名,但無(wú)法在控制臺(tái)上生成與OpenSSL相同的簽名。這是我對(duì)OpenSSL所做的工作(在本教程之后):生成密鑰對(duì):openssl genrsa -out private.pem 1024提取公鑰:openssl rsa -in private.pem -out public.pem -outform PEM -pubout創(chuàng)建數(shù)據(jù)哈希:echo 'data to sign' > data.txtopenssl dgst -sha256 < data.txt > hash生成的哈希文件從(stdin)=我手動(dòng)刪除的文件開始(首先忘了提起它,謝謝mata)。簽名哈希:openssl rsautl -sign -inkey private.pem -keyform PEM -in hash  > signature為了在Java中重現(xiàn)結(jié)果,我首先將私鑰從PEM轉(zhuǎn)換為DER:openssl pkcs8 -topk8 -inform PEM -outform DER -in private.pem -nocrypt > private.der現(xiàn)在,我編寫了這個(gè)Java類來(lái)生成相同的簽名:public class RSATest {    public static void main(String[] args) throws IOException,            NoSuchAlgorithmException, InvalidKeySpecException,            InvalidKeyException, SignatureException {        byte[] encodedPrivateKey = readFile("private.der");        byte[] content = readFile("data.txt");        KeyFactory keyFactory = KeyFactory.getInstance("RSA");        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encodedPrivateKey);        RSAPrivateKey privateKey = (RSAPrivateKey) keyFactory                .generatePrivate(keySpec);        Signature signature = Signature.getInstance("SHA256withRSA");        signature.initSign(privateKey);        signature.update(content);        byte[] signatureBytes = signature.sign();        FileOutputStream fos = new FileOutputStream("signature-java");        fos.write(signatureBytes);        fos.close();    }    private static byte[] readFile(String filename) throws IOException {        File file = new File(filename);        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(                file));        byte[] bytes = new byte[(int) file.length()];        bis.read(bytes);        bis.close();        return bytes;    }}不幸的是結(jié)果并不相同,所以我想我一定做錯(cuò)了什么,但我不知道該怎么辦。你們中的某人可以幫助我找到錯(cuò)誤嗎?
查看完整描述

3 回答

?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊

在第一種情況下,您采用任意摘要并對(duì)其進(jìn)行簽名,在此過(guò)程中將丟失使用sha256創(chuàng)建的摘要的信息,因此生成的簽名將不/不能包含該信息,而第二種情況下的ASN1數(shù)據(jù)簽名表明確實(shí)如此。因此,只有在驗(yàn)證者確切知道摘要是如何產(chǎn)生的情況下,才可以驗(yàn)證第一個(gè)簽名,因此它不是真正無(wú)效,而是不完整(較低級(jí)別)的輸出。

查看完整回答
反對(duì) 回復(fù) 2019-10-29
?
瀟瀟雨雨

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊

你又是對(duì)的。使用您的命令,簽名與Java生成的簽名相同。但是另一個(gè)問(wèn)題出現(xiàn)在我身上。我的舊(不正確)簽名已使用命令成功驗(yàn)證,該命令openssl rsautl -verify -inkey public.pem -keyform PEM -pubin -in signature > verified不再起作用。

查看完整回答
反對(duì) 回復(fù) 2019-10-29
  • 3 回答
  • 0 關(guān)注
  • 2128 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)