使用{base64编码的sha256结果}密码生成器时出现问题

时间:2014-04-11 00:37:43

标签: cryptography base64

我想编码一个SHA-256输出(十六进制)给我一个16字符的base64字符串用于密码使用目的。 base64似乎不是我认为它应该是什么。这就是我想要的。

(0)           "00000000000000000000000000000000" -> "AAAAAAAAAAAAAAAA"
(64)          "00000000000000000000000000000040" -> "AAAAAAAAAAAAAABA" 
(255)         "000000000000000000000000000000ff" -> "AAAAAAAAAAAAAAC/"
(2^16+16)    "0000000000000000000000000000100f" -> "AAAAAAAAAAAAAPAP"

继承人我得到了什么

base64encode("00000000000000000000000000000000")  
"MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAA"

此结果与在线转换器一致,使用R等, 所以很明显base64并不是我认为的,我正在尝试做别的事情。如果我不想“在64位编码”,我想做什么?

我最喜欢的是:

> base64encode(64)
[1] "AAAAAAAAUEA="
> base64encode("64")
[1] "NjQA"

这让我很困惑

1 个答案:

答案 0 :(得分:1)

Base64适用于字节数组,因此在您的示例中,base64encode("00000000000000000000000000000000")将字符串值" 000 ..."编码为字节数组。由于字符的字节值" 0"是0x30,你基本上编码一个由32个0x30字节组成的字节数组(并且通过它的外观,最后是一个空终止符(0x00))。

如果您尝试获得16个字符的输出,则需要对12个字节的输入进行编码(因为Base64为3个字节的输入产生4个字符的输出),例如: (你不会提供语言,所以我猜测字节数组的语法为{ 0x.., 0x.., ... }):

base64encode({0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
= "AAAAAAAAAAAAAAAA"

base64encode({0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01})
= "AAAAAAAAAAAAAAAB"

base64encode({0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40})
= "AAAAAAAAAAAAAABA"

etc...

SHA-xxx算法应该自然地产生一个字节数组输出,因此您应该能够从中获取适当的字节数,并将它们传递给base64encode。如果SHA方法产生十六进制字符串输出,那么在传递Base64编码之前,您需要将十六进制字符串转换回字节数组。