Tag: openssl

AES使用java加密openssl解密

我必须使用openssl命令行或C api加密xml文件。 输出应为Base64。 java程序将用于解密。 此程序由客户提供,无法更改(他们将此代码用于遗留应用程序)。 正如您在下面的代码中看到的那样,客户提供了一个密码短语,因此密钥将使用SecretKeySpec方法生成。 Java代码: // Passphrase private static final byte[] pass = new byte[] { ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘0’,’1′, ‘2’, ‘3’, ‘4’, ‘5’ }; public static String encrypt(String Data) throws Exception { Key key = generateKey(); Cipher c = Cipher.getInstance(“AES/ECB/PKCS5Padding”); c.init(Cipher.ENCRYPT_MODE, key); byte[] encVal = […]

JSSE包创建两个需要两次unwraps的tls包。 为什么?

我正在使用连接的openssl客户端检查jsse tls加密和解密的java应用程序的行为。 首先,我观察到当我为客户端数据调用unwrap时,它总是解包消耗37个字节并产生0.下一个unwrap消耗一些字节并产生一些。 起初我以为客户端会首先包装一个空数组。 但后来我发现jsse代码做的相同,只不过它产生1个字节而不是0。 因此,对wrap每次调用都会消耗X个字节并产生Y个字节,但需要两个unwrap而第一个消耗37个字节并产生1个字节,第二个消耗Y-37字节并产生X-1个字节。 虽然openssl和jsse几乎一样,但我希望这是正确的。 但是我想知道,为什么会这样。 我没有看到这个原因,需要额外的资源……?

Android Google Play旧OpenSSL警告

我刚刚发现安全警报说“您的应用程序正在使用包含安全漏洞的OpenSSL版本。”并链接到本文: https://support.google.com/faqs/answer/6376725 我做了一个grep命令来查找apk中使用的OpenSSL版本 unzip -p YourApp.apk | strings | grep “OpenSSL” 我发现该应用程序使用的是OpenSSL 1.0.1k 8 Jan 2015 问题是,我没有明确使用任何OpenSSL类,我没有依赖它。 所以可能其他一些依赖项是使用旧的OpenSSL版本,但我不知道,我怎么能找到使用OpenSSL依赖的库。 我试图找到哪个库使用OpenSSL与此命令./../gradlew -q dependencies但根本没有任何OpenSSL ..

在Java中格式化OpenSSL的RSA密钥

背景 使用命令在Linux上使用OpenSSL生成RSA密钥, openssl genrsa -out mykey.pem 1024 创建了以下内容: “—–BEGIN RSA PRIVATE KEY—– MIICXQIBAAKBgQChs9Fepy5FgeL0gNJ8GHcKRHsYnM2Kkw19zwydDQNyh2hrHWV2 B11wpLFp8d0imcl2Wjb0oV/AxOhb3unQgNzs66LVuXJwS8icp3oIJZtExs6tkxzE s5mnU68wMeCYtJqHIZOmNblVWvpJMLNAwAVi3oLfnzDDbzjnDapm8M21nQIDAQAB AoGAZ11P1+acUHgvwMXcRtFIvvp5iYkqZouL00EYOghIjNx75gTbh7A7jbbpZeTi y6xsuMgAWy4QzGPSeG+tHMhS7+dYQNPuKSv5KtK3V7ubXz/I3ZN1etRVecA56QNw 7HKv6b7srolt08kogGIwpbbfl/mhfJHnv4Jeqd5lNMnK4e0CQQDWFZo4h22OlSaH ZGd3i4rwLrA0Ux5bkdh7YH0uEeE/nGzpVs1DPhsN8UCyq9LAiKYLlXeeCvwurKwo OgKlUCkzAkEAwVy2KignoRInFTAaYH8PQRfD835q+oC0Iu21BF68ne06U6wu+wWk bWiYxTOOb+TGZfA1vA6OAvGVGoXs1bHF7wJBAItGiop0MKYuCl7Sxy1SrxUKir+/ w2Q3QesiHs41+6Byl7hGLEuuv9MWPM0AU5/GRqAKoUNESkPjOi0BcG8z81kCQGGn OvCreugjzM0skAWv5bpQEExGyixdF5yURFlCpytzBYQAb3Gi9dmze4QMd6EW/wO4 fsrM5vehnlXY0TVTJM0CQQCMPVhub8LSo7T/lCzypvb/cgxJfyITRKcM2asrXud5 r27kbzsXqYum4huHqyFkb3pZammsYA/z89HchylfrD4U —–END RSA PRIVATE KEY—–” Java 6下的以下代码, KeyPairGenerator keyGen = null; try { keyGen = KeyPairGenerator.getInstance(“RSA”); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } KeyPair pair = keyGen.generateKeyPair(); privateKey = […]

Java密钥库是否可以导入OpenSSL生成的密钥对?

我使用openssl生成一个认证密钥。 这是我的命令: openssl genrsa -des3 -out enc_key.pem 1024 我导出到cer文件,然后使用java keytool我导入到java密钥库(jks)。 密钥库听起来不错。 我可以从我的Java应用程序加载密钥库。 问题是当客户端连接到服务器时(在这种情况下是FTP服务器,而不是Web服务器,我使用apache mina),发生exception: javax.net.ssl.SSLHandshakeException:SSL握手失败。 org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:433)位于org.apache.mina.core的org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) .filterchain.DefaultIoFilterChain.access $ 5(DefaultIoFilterChain.java:429) … 引起:javax.net.ssl.SSLHandshakeException:在com.sun.net.ssl.ssl.inl.ssl.SSLEngineImpl的com.sun.net.ssl.internal.ssl.Handshaker.checkThrown(未知来源)中没有共同的密码套件来自com.sun.net.ssl.internal.ssl.SSLEngineImpl.writeAppRecord(未知来源)的.checkTaskThrown(未知来源)位于javax.net的com.sun.net.ssl.internal.ssl.SSLEngineImpl.wrap(未知来源) .ssl.SSLEngine.wrap(未知来源) … 引起:javax.net.ssl.SSLHandshakeException:在com.sun.net.ssl.inl.ssl.SSLEngineImpl的com.sun.net.ssl.internal.ssl.Alerts.getSSLException(未知来源)中没有共同的密码套件.fatal(未知来源) 我想问一些事情: 我使用openssl生成的认证密码是什么? 我们怎么知道? 也许通过命令行openssl xxx? 我去http://java.sun.com/j2se/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#AppA 。 我把SSL_RSA_xxx设置为启用密码套件,但仍然无法工作(我把SSL_RSA放在SSL,因为SSL使用的是ssl implisit,而genrsa,只是我的意见genrsa生成RSA)。 这是对的吗? 有人知道解决方案吗? 或者,任何人都知道如何从openssl命令行生成标准密钥库,直到可以在java应用程序中使用(当然使用密码)。 因为我现在可以从openssl和export keystore java生成认证,但我不知道我使用的密码是什么以及我在java应用程序中的使用方式。 注意:如果密钥库直接从java生成,我可以运行。 现在问题是如果java keytool生成的密钥库来自认证,如openssl(和其他可能)。 任何帮助将不胜感激! 谢谢

如何用java中的RSA密钥加密解密

我需要用openssl生成的rsaprivatekey.pem和rsapublickey.pem密钥替换从Unix到java代码的加密和解密步骤 我生成了密钥 openssl genrsa -out /tmp/rsaprivatekey.pem -des3 1024 openssl rsa -in /tmp/rsaprivatekey.pem -pubout -out /tmp/rsapublickey.pem 我在unix中使用键(我需要在java中执行) echo “Text to encript”| openssl rsautl -encrypt -inkey /tmp/rsapublickey.pem -pubin -out out.enc openssl rsautl -decrypt -inkey /tmp/rsaprivatekey.pem -in out.enc 这是我尝试这样做的 public static void main(String[] args) { Base64 base64 = new Base64(); String TextStream = “this is the input text”; […]

如何将证书链添加到密钥库?

我有证书链的文件 – certificate.cer: subject=/C… issuer=/C=US/O=VeriSign, Inc… —–BEGIN CERTIFICATE—– … —–END CERTIFICATE—– subject=/C=US/O=VeriSign, Inc… issuer=/C=US/O=VeriSign, Inc… —–BEGIN CERTIFICATE—– … —–END CERTIFICATE—– subject=/C=US/O=VeriSign, Inc… issuer=/C=US/O=VeriSign, Inc… —–BEGIN CERTIFICATE—– … —–END CERTIFICATE—– 我需要将这个证书链添加到密钥库。 我做的事: openssl x509 -outform der -in certificate.cer -out cert.der keytool -v -importcert -alias mykey -file cert.der -keypass -keystore keystore -storepass -alias 结果我在密钥库中只有1个证书。 但应该有3。 可能有什么不对? 解: […]

使用BouncyCastle从文件中读取椭圆曲线私钥

BouncyCastle加密API允许使用常规java.security包对象创建和validation数字签名,例如java.security.PublicKey , java.security.PrivateKey及其容器java.security.KeyPair 。 假设我使用OpenSSL创建一个.pem(或者,如果更简单,一个.der文件),它包含我想在我的应用程序中使用的椭圆曲线私钥。 例如,它看起来像这样: —–BEGIN EC PARAMETERS—– BgUrgQQACg== —–END EC PARAMETERS—– —–BEGIN EC PRIVATE KEY—– MHQCAQEEIDzESrZFmTaOozu2NyiS8LMZGqkHfpSOoI/qA9Lw+d4NoAcGBSuBBAAK oUQDQgAE7kIqoSQzC/UUXdFdQ9Xvu1Lri7pFfd7xDbQWhSqHaDtj+XY36Z1Cznun GDxlA0AavdVDuoGXxNQPIed3FxPE3Q== —–END EC PRIVATE KEY—– 如何使用BouncyCastle API获取包含此私钥和相应公钥的java.security.KeyPair ? 请注意我想使用BouncyCastle 1.50中提供的API(在撰写本文时是最新的)并且没有弃用的API。 遗憾的是,这不包括其他SO答案中使用的PEMReader类。 此外,这个问题特定于椭圆曲线的格式; 在比较RSA或DSA密钥文件时,它们包含其他参数。

用Java生成X509Certificate的主题哈希

我目前正在尝试使用Java Security API和BouncyCastle生成主题哈希。 当我使用Openssl库时,这就是我的工作: openssl x509 -in /Users/Sn0wfreezeDev/Downloads/Test.pem -hash 这会生成一个短的8位数哈希值1817886a 这是我的Java代码 X509Certificate cert = CertManager.getCertificate(number, c); MessageDigest sha1 = MessageDigest.getInstance(“SHA1″); System.out.println(” Subject ” + cert.getSubjectDN()); System.out.println(” Issuer ” + cert.getIssuerDN()); sha1.update(cert.getSubjectDN().getName().getBytes()); String hexString = bytesToHex(sha1.digest()); System.out.println(” sha1 ” + hexString); System.out.println();

使用Java生成证书,公钥和私钥

我正在寻找一个java库或代码来动态生成证书,公钥和私钥,而不使用第三方程序(如openssl)。 我觉得有些东西是使用keytool + openssl但是来自Java代码。 考虑使用ssl和客户端身份validation保护的基于java servlet的Web应用程序。 我希望servlet容器仅在请求时使用Java代码生成客户端证书(例如,pkcs12格式)。