2014-02-14 3 views
2

Я хочу зашифровать мою почтовую нагрузку сертификатом 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) 

Но я не могу понять, командные строки для шифрования/дешифрования текстовый файл, используя этот сертификат

+0

'md5WithRSAEncryption' и 4096-битный ключ является * реальный * несоответствие. Возможно, вам стоит рассмотреть «sha256WithRSAEncryption». В MD5 осталось меньше 64 бит, а 4096-битный модуль имеет более 128 бит безопасности. MD5 сломан и не может обеспечить сопротивление столкновения с течением времени. – jww

+0

ok Я возьму это для рассмотрения. Я не был тем, кто создавал этот ключ, скорее потребитель, который получил ключ от третьего лица. – MatthiasLaug

+0

Почему? Почему бы не использовать HTTPS, как и все остальные? – EJP

ответ

-1

Как вы используете асимметричную криптографию, если вы шифруете с помощью открытого ключа вашего сертификата, вы можете расшифровать его только с помощью соответствующего закрытого ключа. Убедитесь, что у вас есть этот ключ и используйте его для дешифрования.

+2

нормально, но как сделать шифрование на консоли с помощью команды openssl? – MatthiasLaug

1

Вы можете проверить свою зашифрованную строку с помощью OpenSSL с помощью следующей команды:

echo -n 'string to encrypt' | openssl rsautl -encrypt -certin -inkey testcert1.crt | base64 
Смежные вопросы