密钥生成器已初始化为1024,所以为什么打印的大小为635和162?
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
public class TEST {
public static KeyPair generateKeyPair() throws NoSuchAlgorithmException, NoSuchProviderException {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "BC");
keyPairGenerator.initialize(1024);
return keyPairGenerator.generateKeyPair();
}
public static void main(String[] args) throws Exception {
KeyPair keyPair = generateKeyPair();
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
System.out.println("Size = " + privateKey.getEncoded().length);
System.out.println("Size = " + publicKey.getEncoded().length);
}
}
RSA密钥由模量和指数组成。密钥大小是指模数中的位。因此,即使没有任何编码开销,您也将需要超过128个字节来存储1024位密钥。
getEncoded()返回ASN.1 DER编码的对象。私钥甚至包含CRT参数,因此非常大。
要获取密钥大小,请执行以下操作,
System.out.println("Key size = " + publicKey.getModulus().bitLength());
这是相关的ASN.1对象,
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}
我在C#程序(我在下面提到)中使用了RSA非对称密钥加密算法,我必须通过java程序加密数据。我希望我的java程序生成与C#程序相同的加密密钥。 公钥: C#加密程序: Java加密方案: 我尝试了上述java程序,但结果如下: O+gw 7+X hY x A 9 ltD V 5 zE RsF 4 Dy Xg MTc/gx 82 wR tT 1 x fR 3 su Y 0 XB JLa dp 7
也许你能帮我。非常感谢!
想要在java中使用生成的RSA公钥,在c#函数中加密数据并在Java解密函数中解密。 生成的Java公钥已被替换为c#中的模数标记: C#加密功能: Java解密函数: 第一个问题:在c#XML字符串中替换模数标记中的Java公钥正确吗?指数标签呢?我用了AQAB值。 第二个问题:为什么在解密Java得到这个错误: 经过一些研究,我发现这是一个普遍的错误,什么原因会导致这种错误?
在下面的代码中(也在http://play.golang.org/p/77fRvrDa4A但是在浏览器中需要“太长的时间来处理”)124字节版本的sourceText不会加密,因为1024的“消息对于RSA公钥大小来说太长”。它和更长的124字节sourceText版本可使用2048位密钥大小。 我的问题是如何准确计算rsa中的密钥大小。GenerateKey给定源文本的字节长度?(一个小段落大小
我试图通过Wireshark分析一个SSL3.0会话。具体来说,我想解密加密的预主密钥。我的理解是预主用证书公钥加密。这是基于SSL RFC和规范 我按如下方式启动了一个OpenSSL服务器: 并连接如下: 然后我在wireshark中捕获SSL握手,并查看第三个数据包,标记为“客户机密钥交换,更改密码规范,加密握手消息”。在“客户端密钥交换”下,有一个128字节的部分,我把它理解为加密的预主密钥