解密的RSA结果与签名的消息不匹配

时间:2011-11-12 05:42:40

标签: java rsa bouncycastle encryption

我使用Bouncy Castle Crypto API来解密密文,并验证签名的邮件。

签名消息:

signedMessageOther: D0F39F8C8495CA83D2F24536083CCB280CD3A54B

邮件已解密:

01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFF003021300906052B0E03021A05000414D0F39F8C8495CA83D2F2453608
3CCB280CD3A54B


只有最后20个字节与 signedMessageOther匹配 的为什么吗


以下是密钥的内容:

Algorithm: RSA
Format: X.509
Key Length: 162

密钥是162字节-1024 bi,因此它是一个虚拟密钥 这是代码:

import java.security.PublicKey; 
import java.security.Security; 
import javax.crypto.Cipher; 

public class DecyrptTest { 
    public static void main (String[] args) throws Exception { 
        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 
        //msg is some secret msg ,i have deleted. 
        String msg = ""; 
        byte[] signedMsgBytes = SHA1.sign(msg); 
        String signedMessageOther=StringTools.bytesToHex(signedMsgBytes); 
        System.out.println("signedMessageOther: "+signedMessageOther); 

        String ct="1386cfed01490b9026903722324f80f8a56cc38169b46e15154ce9e7168ff589282855002e195a0c1a96d5fe540a7fa97b01ae24f365f39302e0c1186ee9308d6b94526741f7093dc2678c713bb2b1a8a6942decb35b16725353da523417cb835cea903485b19b63c2c444c8bc6c865ea78c749f10ca70b266f6078192f5c76c"; 

        Cipher cipher = Cipher.getInstance("RSA", "BC"); 
        PublicKey pubKey = KeyUtil.getPubKeyFromFile("res/key.pub"); 
        System.out.println("Algorithm: "+pubKey.getAlgorithm()); 
        System.out.println("Format: "+pubKey.getFormat()); 
        System.out.println("Key Length: "+pubKey.getEncoded().length); 

        cipher.init(Cipher.DECRYPT_MODE, pubKey); 
        byte[] ctBytes=StringTools.hexStringToByteArray(ct); 
        System.out.println(ctBytes.length); 
        byte[] cipherText2 = cipher.doFinal(ctBytes); 
        System.out.println("cipher: " + StringTools.bytesToHex(cipherText2)); 
    } 
}

1 个答案:

答案 0 :(得分:0)

你正在努力驾驶内燃机。你需要一辆车。

RSA是一种原始操作,可以与其他东西拼凑起来构成一个有用的加密系统。你不能单独使用它来完成整个工作。

我不确定这是否真的说密钥是162位,但如果是这样,那是一个完全没用的RSA密钥大小。 RSA密钥必须至少为384位才能完全使用。此外,RSA无法签署或加密大于密钥的数据。 162位大约是20个字节。听起来很熟悉吗?

您无法使用引擎开车上班。你需要一辆车。 RSA是一个引擎。

相关问题