我将 SagePay 的表单集成方法与 Ruby on Rails/EmberJS 应用程序一起使用。我正在处理 Rails 中所有复杂的支付结构。
简而言之,SagePay 需要一个加密、编码的“crypt”字符串,其中包含用户的账单地址、金额、支付后重定向和其他交易数据等数据。
SagePay在测试环境中给出一个加密密码。表单集成指南说将 crypt 构建为字符串,然后使用 AES-256 和加密密码对其进行加密,然后 Base64 对字符串进行编码以 POST 到 Sage 测试支付服务器。
以下是我实现它的方式(使用 Encryptor gem):
def encryptandencode(string)
salt = Time.now.to_i.to_s
secret_key = 'test-server-secret-key-from-sage'
iv = OpenSSL::Cipher::Cipher.new('aes-256-cbc').random_iv
encrypted_value = Encryptor.encrypt(string, :key => secret_key, :iv => iv, :salt => salt)
encoded = Base64.encode64(encrypted_value).encode('utf-8')
return encoded
end
其中string
是包含交易数据的未编码、未加密的 Crypt 字符串。
问题
加密器拒绝使用给定的密钥。它说钥匙太短了。
我在这里想念什么?