在您开始阅读我所有的长篇文章之前,我弄清楚了为什么它不起作用。它与base64有关,默认情况下每60个字符后添加一个新行。此链接:base64 encode length parameter 有点夸张。是否有Base64模块在每76个字符后添加新行?
所以解决方案就是这样
database.query('SELECT * FROM `inventories` WHERE `id` = ' + database.pool.escape(id), function(err, row){
请帮助我以适当的方式将此bash脚本翻译为ruby。其实只是base64编码不好
更新
重击方式
@checkout_signature = Base64.strict_encode64(@signature + "|" + checkout_request)
@checkout_signature = @checkout_signature.insert(76, "\n") # once
or
@checkout_signature.gsub!(/.{76}(?=.)/, '\0'+"\n") # every 76 chars
结果
#!/bin/bash
echo 'Signature test'
export checkout_request='{"charge":{"amount":499,"currency":"EUR"}}'
echo $checkout_request
export signature=`echo -n "$checkout_request" | openssl dgst -sha256 -hmac 'pr_test_tXHm9qV9qV9bjIRHcQr9PLPa' | sed 's/^.* //'`
echo $signature
echo '--------'
echo -n "$signature|$checkout_request" | base64
红宝石方式
{"charge":{"amount":499,"currency":"EUR"}}
cf9ce2d8331c531f8389a616a18f9578c134b784dab5cb7e4b5964e7790f173c
--------
Y2Y5Y2UyZDgzMzFjNTMxZjgzODlhNjE2YTE4Zjk1NzhjMTM0Yjc4NGRhYjVjYjdlNGI1OTY0ZTc3
OTBmMTczY3x7ImNoYXJnZSI6eyJhbW91bnQiOjQ5OSwiY3VycmVuY3kiOiJFVVIifX0=
Y2Y5Y2UyZDgzMzFjNTMxZjgzODlhNjE2YTE4Zjk1NzhjMTM0Yjc4NGRhYjVjYjdlNGI1OTY0ZTc3OTBmMTczY3x7ImNoYXJnZSI6eyJhbW91bnQiOjQ5OSwiY3VycmVuY3kiOiJFVVIifX0=
结果
checkout_request='{"charge":{"amount":499,"currency":"EUR"}}'
secret_key ='pr_test_tXHm9qV9qV9bjIRHcQr9PLPa'
@signature = OpenSSL::HMAC.hexdigest('sha256', secret_key, checkout_request);
puts @signature;
puts "-----"
@checkout_signature = Base64.urlsafe_encode64(@signature + "|" + checkout_request)
puts @checkout_signature
更新 好的签名是好的,但是我使用了错误的base64编码。...
SOMEHOW
cf9ce2d8331c531f8389a616a18f9578c134b784dab5cb7e4b5964e7790f173c
-----
ODY4YzY4YTg4NmFmOTg2MGY5OGVjMmUyODM5OTBhYmViNmQyZjUzYWI5ZjgxMzlhYzFlODllNThhZTVhZTFkMnx7ImNoYXJnZSI6eyJhbW91bnQiOjQ5OSwiY3VycmVuY3kiOiJFVVIifX0=
在$ signature之后添加换行符
及其bash结果中唯一的'\ n'
在使用echo -n "$signature|$checkout_request" | base64
的红宝石中,我得到了更多的n
.encode64
当我使用"Y2Y5Y2UyZDgzMzFjNTMxZjgzODlhNjE2YTE4Zjk1NzhjMTM0Yjc4NGRhYjVj\nYjdlNGI1OTY0ZTc3OTBmMTczY3x7ImNoYXJnZSI6eyJhbW91bnQiOjQ5OSwi\nY3VycmVuY3kiOiJFVVIifX0=\n"
或.strict_encode64
时,没有.urlsafe_encode64
\n
bash的结果如下所示
"Y2Y5Y2UyZDgzMzFjNTMxZjgzODlhNjE2YTE4Zjk1NzhjMTM0Yjc4NGRhYjVjYjdlNGI1OTY0ZTc3OTBmMTczY3x7ImNoYXJnZSI6eyJhbW91bnQiOjQ5OSwiY3VycmVuY3kiOiJFVVIifX0="
c3之后必须有换行符,这就是Y2Y5Y2UyZDgzMzFjNTMxZjgzODlhNjE2YTE4Zjk1NzhjMTM0Yjc4NGRhYjVjYjdlNGI1OTY0ZTc3
OTBmMTczY3x7ImNoYXJnZSI6eyJhbW91bnQiOjQ5OSwiY3VycmVuY3kiOiJFVVIifX0=
显示变量的方式。我无法像在ruby中那样检查它
为什么会有这种差异