我想用X.509证书和继承的公钥加密我的后期有效载荷。到目前为止,我有这个Java代码来执行加密使用X.509公共证书加密和解密
private String encrypt(String str) throws Exception {
ClassPathResource classPathResource = new ClassPathResource("testcert1.crt");
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate)certificateFactory.generateCertificate(classPathResource.getInputStream());
PublicKey pk = certificate.getPublicKey();
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING");
cipher.init(Cipher.ENCRYPT_MODE, pk);
return Base64.encodeBase64String(cipher.doFinal(str.getBytes()));
}
它返回base64编码的字符串。从端点我总是得到结果,证书是无效的。
所以我想验证我的加密字符串在控制台上使用openssl
命令,但没有这样做。
我可以读出与证书:openssl x509 -in testcert1.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=xxx, ST=xxx, L=xxx, O=xxx, OU=xxx, CN=xxx
Validity
Not Before: Jul 24 11:40:39 2013 GMT
Not After : Jul 24 11:40:39 2015 GMT
Subject: C=xxx, ST=xxx, L=xxx, O=xxx, OU=xxx, CN=xxx
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (4096 bit)
Modulus (4096 bit):
....
Exponent: 65537 (0x10001)
但我想不通的命令行,如果加密/使用该证书
'md5WithRSAEncryption'和4096位的密钥是一个真正的* *不匹配。也许你应该考虑'sha256WithRSAEncryption'。 MD5的安全性还不到64位,而4096位的模数超过了128位的安全性。 MD5被破坏,并且不能提供随时间的碰撞阻力。 – jww
好的,我会考虑这一点。我不是那个创造那个钥匙的人,而是那个从第三方那里得到钥匙的消费者。 – MatthiasLaug
为什么?为什么不像其他人一样使用HTTPS? – EJP