python-3.x - 将十六进制转换为 base64 - 在这个过程中真正发生了什么?
问题描述
试图制作简单的代码将十六进制字符串转换为base64:
我的想法是:十六进制->整数->二进制-> base64
所以我写了这个小代码:
import string
def bit(integer):
# To binary
return int(bin(integer))[2:]
#Hex multiply by 16 depending on position: 0xAB = A*(16**2) + B(16**1) = #10*16**2 + 11*16**1
#0x3a2f
#3*(16**2) + 7*(16**1) + 5
def removeletter(list):
#"abcdef" = "10 11 12 13 14 15"
for i, letter in enumerate(list):
if letter in hextable.keys():
list[i] = hextable[letter]
return list
def todecimal(h):
power = 0
l = [num for num in str(h)] #['3', 'a', '2', 'f']
l = removeletter(l)
l.reverse() #['f', '2', 'a', '3']
for i, n in enumerate(l):
number = int(n)
l[i] = number*(16**power)
power += 1
l.reverse()
return sum(l)
lowers = string.ascii_lowercase
hextable = {}
for number, letter in enumerate(lowers[:6]):
hextable[letter] = number + 10
在我正在做的这个小挑战中,它说:
The string:
49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d
Should produce:
SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t
好的,
print(bit(todecimal('49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d')))
这应该得到十六进制字符串的二进制文件,如果我通过二进制到 base64 转换器,应该返回SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t
. 或者我是这么想的。
└─$ python3 hextobase64.py
10010010010011101101101001000000110101101101001011011000110110001101001011011100110011100100000011110010110111101110101011100100010000001100010011100100110000101101001011011100010000001101100011010010110101101100101001000000110000100100000011100000110111101101001011100110110111101101110011011110111010101110011001000000110110101110101011100110110100001110010011011110110111101101101
使用十六进制到二进制转换器检查后,我可以看到二进制是正确的。现在,如果我通过二进制到 base64 转换器,它应该返回 SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t
,对吗?
问题是,这个二进制到 base64 的转换器给了我kk7aQNbS2NjS3M5A8t7q5EDE5MLS3EDY0tbKQMJA4N7S5t7c3urmQNrq5tDk3t7a
这对我来说很奇怪。所以我一定做错了什么。据我了解,十六进制可以用二进制表示,base64 也可以。base64 采用二进制并将二进制按 6 位分组以产生自己的表示。所以很明显,如果我有二进制文件,它应该是可以互换的,但是出了点问题。
我究竟做错了什么?
解决方案
推荐阅读
- c - STM32F103 HAL_CAN_RxFifo0MsgPendingCallback 无法工作
- ios - 如何在 iOS 项目中减小 openCV 框架大小
- ionic4 - 如何使用离子网格创建砌体布局?
- mysql - 为什么在我运行 npm run dev 代码时会更改我的 mix-manifest 文件?
- python - Databricks 笔记本命令仅在计划为作业时跳过
- jquery - 如何在 jQuery( 文档 ).ready 中显示用户名?
- php - 添加新的“tax_query”数组后,WooCommerce WP_Query 返回空 [已解决]
- angular - 在文本字段中添加和删除值将模型设置为空字符串 ("") 而不是 null
- mongodb - Mongoose DB Lookup 管道匹配问题
- reactjs - 你可以为特定的 URL 创建一个全局路由吗?反应路由器