【发布时间】:2017-11-07 23:16:14
【问题描述】:
我正在使用以下 Ruby 代码来加密字符串
require 'openssl'
require 'base64'
public_key = OpenSSL::PKey::RSA.new(File.read('public_key'))
Base64.encode64(public_key.public_encrypt('Some random string that I want to encrypt.'))
我需要将请求中的加密文本传递给 API,在 API 端,我收到以下错误(通过 API 日志读取):
javax.crypto.BadPaddingException: Decryption error
现在,我在 Stackoverflow 上解决了许多问题,但鉴于我的 Ruby 代码,我做错了什么,加密文本无法在 API 端解密。很明显,API端使用的是Java。
在加密方面我完全是个菜鸟,但是通过在 Ruby 中加密和解密,我确保了在 Ruby 中的实现是正确的。当通过 Ruby 语言加密的文本在 API 端通过 Java 解密时,就会出现问题。
【问题讨论】:
-
在 Ruby 和 Java 中将模数输出为 BigInteger 并检查它们是否相同。应该可以帮助您确定您是否在 Java 中正确加载了私钥。还要检查每个使用的填充。如果您使用的是 PKCS#1Padding 或 OAEP,您的 Ruby 代码并不明显。
-
好吧,我的代码使用的是 PKCS1 填充。
-
那么 Java 端期望什么填充?
-
@EbbeM.Pedersen 它需要 PKCS1。
-
您的问题中需要包含API的Java代码,包括解密部分,加载私钥和解码客户端发送的数据
标签: java ruby encryption rsa public-key-encryption