gpt4 book ai didi

php - 将 PHP 代码转换为 Ruby 以获得 SHA512 哈希码

转载 作者:太空宇宙 更新时间:2023-11-03 16:41:10 24 4
gpt4 key购买 nike

PHP 代码:

$secret = '70b49742-adbf-4ac5-9cd6-5ded5c39aa83'; // Signature Secret

$fields = array(
'merchant_reference' => '1234567890',
'currency' => 'USD',
'amount' => '100.00',
'customer_ip' => '123.123.123.123',
'customer_name' => 'Someone Buying',
'customer_address' => '1, Bay Street',
'customer_phone' => '0123123123',
'customer_email' => 'someone@gmail.com',
'customer_country' => 'US',
'return_url' => 'https://demo.shop.com/payment/return'
);

ksort($fields);

$sign = hash('SHA512', http_build_query($fields) . $secret);

// value of $sign
// 750b059c76657abf2a2b73e0c8d919ec5739f83a713fcdce1fd22f2b3f45446d554bc26d6508972ba16cf2c4e55ec46861d966ba976effaeba9802b829164417

我尝试在 Ruby 代码 中进行上述转换:

require 'digest'
secret = '70b49742-adbf-4ac5-9cd6-5ded5c39aa83'
fields = {
'merchant_reference' => '1234567890',
'currency' => 'USD',
'amount' => '100.00',
'customer_ip'=> '123.123.123.123',
'customer_name' => 'Someone Buying',
'customer_address'=> '1, Bay Street',
'customer_phone' => '0123123123',
'customer_email' => 'someone@gmail.com',
'customer_country' => 'US',
'return_url' => 'https://demo.shop.com/payment/return'
}

sorted_fields = Hash[fields.sort_by{|key,value| key}]

sign = OpenSSL::HMAC.hexdigest('sha512', secret, sorted_fields.to_query)
# Output:
# 9c3104f9efd449987cc2055a1524b0f6c032fc3ae9e7516bbb8de2bffca08a212558323dd17cc96b77d6d63a8b92777ddadb38df39fa75971408efc16296322a

我期待 sign 的输出相同。在 PHP 代码中,我将 http_build_query($fields) 替换为 Ruby 生成的字符串 sorted_fields.to_query 值,它运行良好。

我确定下一行有问题:

OpenSSL::HMAC.hexdigest('sha512', secret, sorted_fields.to_query)

在 Ruby 中寻找合适的语法。

最佳答案

尝试:

> sign = Digest::SHA512.hexdigest(sorted_fields.to_query + secret) 
# => 750b059c76657abf2a2b73e0c8d919ec5739f83a713fcdce1fd22f2b3f45446d554bc26d6508972ba16cf2c4e55ec46861d966ba976effaeba9802b829164417

完整代码:

secret = '70b49742-adbf-4ac5-9cd6-5ded5c39aa83'
fields = {
'merchant_reference' => '1234567890',
'currency' => 'USD',
'amount' => '100.00',
'customer_ip'=> '123.123.123.123',
'customer_name' => 'Someone Buying',
'customer_address'=> '1, Bay Street',
'customer_phone' => '0123123123',
'customer_email' => 'someone@gmail.com',
'customer_country' => 'US',
'return_url' => 'https://demo.shop.com/payment/return'
}
sorted_fields = Hash[fields.sort_by{|key,value| key}]
sign = Digest::SHA512.hexdigest(sorted_fields.to_query + secret)
puts sign
# 750b059c76657abf2a2b73e0c8d919ec5739f83a713fcdce1fd22f2b3f45446d554bc26d6508972ba16cf2c4e55ec46861d966ba976effaeba9802b829164417

Reference 更多信息请引用 https://ruby-doc.org/stdlib-2.1.0/libdoc/digest/rdoc/Digest.html

关于php - 将 PHP 代码转换为 Ruby 以获得 SHA512 哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49446680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com