小编che*_*ton的帖子

在Rails中使用AES密码块链接解密字符串

我不得不在Rails中实现一个我以前没有合作过或看过的支付网关(Westpac在澳大利亚的Payway,如果有人有兴趣的话).

他们的文档并不坏,系统是相当合乎逻辑的,所以到目前为止它已经非常轻松(支付集成的奇迹).

存在问题的是,在将付款直接发送到Westpac并处理完付款后,他们会使用大型加密参数重定向回我们的网站.然后,这意味着我们要解密以访问实际参数.

这是Westpac的指导:

使用带有密码块链接的AES,使用PCKS-5 Padding对参数进行加密.解密算法应使用16字节零填充初始化向量进行初始化,并应使用加密密钥(可在PayWay Net Shopping Cart设置的Security页面上找到).

在解密之前,使用重定向传递的参数将如下所示:

  EncryptedParameters=QzFtdn0%2B66KJV5L8ihbr6ofdmrkEQwqMXI3ayF7UpVlRheR7r5fA6
  IqBszeKFoGSyR7c7J4YsXgaOergu5SWD%2FvL%2FzPSrZER9BS7mZGckriBrhYt%2FKMAbTSS8F
  XR72gWJZsul9aGyGbFripp7XxE9NQHVMWCko0NlpWe7oZ0RBIgNpIZ3JojAfX7b1j%2F5ACJ79S
  VeOIK80layBwCmIPOpB%2B%2BNI6krE0wekvkkLKF7CXilj5qITvmv%2FpMqwVDchv%2FUNMfCi
  4uUA4igHGhaZDQcV8U%2BcYRO8dv%2FnqVbAjkNwBqxqN3UPNFz0Tt76%2BP7H48PDpU23c61eM
  7mx%2FZh%2Few5Pd0WkiCwZVkSZoov97BWdnMIw5tOAiqHvAR3%2BnfmGsx
Run Code Online (Sandbox Code Playgroud)

Westpac没有Rails演示,但他们确实有PHP.这是PHP演示:

function decrypt_parameters( $base64Key, $encryptedParametersText, $signatureText )
{
    $key = base64_decode( $base64Key );
    $iv = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
    $td = mcrypt_module_open('rijndael-128', '', 'cbc', '');

    // Decrypt the parameter text
    mcrypt_generic_init($td, $key, $iv);
    $parametersText = mdecrypt_generic($td, base64_decode( $encryptedParametersText ) );
    $parametersText = pkcs5_unpad( $parametersText );
    mcrypt_generic_deinit($td);
}
Run Code Online (Sandbox Code Playgroud)

这是我在Rails中尝试过的:

def Crypto.decrypt(encrypted_data, key, iv, cipher_type)
    aes = OpenSSL::Cipher::Cipher.new(cipher_type)
    aes.decrypt
    aes.key = key
    aes.iv = iv if iv != nil …
Run Code Online (Sandbox Code Playgroud)

ruby encryption cryptography ruby-on-rails

3
推荐指数
1
解决办法
2652
查看次数

标签 统计

cryptography ×1

encryption ×1

ruby ×1

ruby-on-rails ×1