You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP与Ruby生成Cashfree API RSA签名Base64结果不一致问题求助

问题根因

你遇到的签名校验失败问题和Base64编码逻辑无关,核心是RSA加密的填充模式不匹配:

  • Ruby的OpenSSL::PKey::RSA#public_encrypt方法默认使用PKCS#1 v1.5填充
  • 官方PHP示例中显式指定了OPENSSL_PKCS1_OAEP_PADDING填充模式,二者加密逻辑不一致,导致生成的密文完全不同
修复方案

直接替换你的签名生成方法即可,显式指定OAEP填充模式和官方逻辑对齐:

def dynamic_signature
  raw_data = "#{client_id}.#{Time.now.to_i}"
  filepath = "public_key.pem"
  public_key = OpenSSL::PKey::RSA.new File.read(filepath)
  # 显式指定OAEP填充,和官方PHP示例逻辑对齐
  encrypted_data = public_key.public_encrypt(raw_data, OpenSSL::PKey::RSA::PKCS1_OAEP_PADDING)
  Base64.strict_encode64(encrypted_data)
end
补充说明

你之前测试时拿到的Base64字节对比结果为true,是因为你复制的是已经生成好的PHP端Base64字符串到Ruby中对比,属于相同字符串的字节比对,自然返回true。实际二者加密环节生成的密文本身就存在差异,所以最终输出的Base64签名才会不同。

内容的提问来源于stack exchange,提问作者tambakoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:48:02