我需要将此OpenSSL::PKey::DH#compute_key
(aString
类型)转换为整数(documentation)。这些是我通过compute_key
检查格式输出的测试。
...
...
shared_key = dh1.compute_key(public_key)
puts "1"
puts shared_key
puts "2"
puts shared_key.to_s
puts "3"
puts shared_key.inspect
puts "4"
puts shared_key.to_yaml
这些输出:
1
���`���,�L@�9�������Q���?�J����
2
���`���,�L@�9�������Q���?�J����
3
"\xD2\xBD\xBA`\xBC\xB1\xA6\x11,\xE9L@\x8C9\xA9\xAF\x88\xFD\x8F\xD9\x92Q\xE9\x93\x92?\xBCJ\xFB\xD2\xAC\xEE"
4
--- !binary |-
0r26YLyxphEs6UxAjDmpr4j9j9mSUemTkj+8SvvSrO4=
我期待一个整数值
95320918630576230557892713337132753026878147296634144208600768328265758846190
如果格式正确。我猜测首先将compute_key
输出的整个字符串/数据转换为二进制,然后转换为整数。但我不太确定这是否是正确的方法。我也试过String::unpack
,但它没有给我预期的格式(或者我unpack
的输入参数可能不正确)。请帮忙。
答案 0 :(得分:1)
好的,我已经设法得到这个号码,但是我不知道它为什么会这样:
步骤1.获取字符串的二进制表示形式:
shared_key.unpack('B*').first
步骤2.将其转换为整数:
shared_key.unpack('B*').first.to_i(2)
#=> 95320918630576230557892713337132753026878147296634144208600768328265758846190
答案 1 :(得分:0)
尝试以下
shared_key.encode( "UTF-8", "binary", :invalid => :replace, :undef => :replace).unpack("B*").first.to_i(2)