我可以在 Java 中进行 RSA 加密,但在 PHP 中进行解密吗?
我可以在 J2ME 或 J2SE 中进行 RSA 加密,并在 PHP 中进行解密吗?
我认为 RSA 是一种规范,与语言无关。
Can I RSA-encrypt in J2ME or J2SE, and decrypt in PHP?
I assume RSA is a specification, and has nothing to do with the languages.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
RSA是一种算法;为了进行互操作,您需要的另一件事是消息格式的规范。 RFC 3447 定义了一种可能的消息格式,还有其他格式,例如 RFC 3110 DNS 密钥格式。还选择一种消息格式,应该没有问题。
RSA is an algorithm; the other thing you need in order to interoperate is a specification of the message format. RFC 3447 defines one possible message format, there are others, for example RFC 3110 DNS key format. Pick a message format as well, and there should be no problem at all.
总之,是的。
您可能遇到的唯一问题是字符编码或行结尾,但很可能您会没事的。
in a word, yes.
the only problem you might run into is character encoding or line-endings, but chances are you'll be fine.
如果您要加密比密钥大的任何内容,您可能需要考虑使用对称密码加密数据,然后使用 RSA 加密对称密钥。执行此操作的标准机制(在 S/MIME 等中使用)是 CMS (IETF 的更新到 PKCS#7)。我不确定 PHP 中对 CMS/PKCS#7 有什么支持,但在 java 方面,您可以使用出色的 充气城堡加密库。您不会遇到互操作性问题,因为所有数据结构均在 ASN.1 中定义。如果这听起来有点复杂,请不要担心,因为这些细节是由加密库为您抽象出来的。
If you are encrypting anything larger than a key, you may want to consider encrypting your data with a symmetric cipher then encrypting the symmetric key using RSA. The standard mechanism for doing this (used in S/MIME etc) is CMS (The IETF's update to PKCS#7). I'm not sure what support there is for CMS/PKCS#7 in PHP but on the java side you can use the excellent bouncy castle crypto library. You will have no interoperability problems as all the data structures are defined in ASN.1. Don't worry if it sounds a bit complicated as these details are abstracted away for you by the crypto library.
是的。我这样做。在 Java 中,任何 JCE 都应该这样做。在 PHP 中,请使用 OpenSSL 扩展。
正如其他人提到的,您最多只能加密 key_length - 11 字节。例如,对于 1024 位密钥,您只能加密 117 个字节。如果您的数据可能超出此范围,请使用 OpenSSL 扩展支持的 PKCS#7。
Yes. I do that. In Java, any JCE should do. In PHP, please use OpenSSL extension.
As others mentioned, you can only encrypt up to key_length - 11 bytes. For example, for a 1024-bit key, you can only encrypt 117 bytes. If your data may exceed that, please use PKCS#7 which is supported by OpenSSL extension.