Base64编码,60个字符后的新行与76个字符后的新行

时间:2018-07-24 19:32:57

标签: json ruby shell ruby-on-rails-5

在您开始阅读我所有的长篇文章之前,我弄清楚了为什么它不起作用。它与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中那样检查它

为什么会有这种差异

0 个答案:

没有答案