我正试图从一个存储在字节数组中的模数和指数创建RSA公钥。经过一些尝试,我得到了以下代码:
func bytes_to_int(b []byte) (acc uint64) {
length := len(b)
if length % 4 != 0 {
extra := (4 - length % 4)
b = append([]byte(strings.Repeat("\000", extra)), b...)
length += extra
}
var block uint32
for i := 0; i < length; i += 4 {
block = binary.BigEndian.Uint32(b[i:i+4])
acc = (acc << 32) + uint64(block)
}
return
}
func main() {
fmt.Println(bytes_to_int(data[:128]))
fmt.Println(bytes_to_int(data[128:]))
}
这似乎能够工作(尽管我并不确定是否有更好的方法)。我的下一步是将其转换为使用math/big以处理更大的数字。我可以看到Lsh函数来执行<<,但无法弄清楚如何递归地将Uint32(块)添加到big.Int中。
供参考,我试图导入的公钥是存储在密钥环(pubring.mix)中的Mixmaster密钥: http://www.mixmin.net/draft-sassaman-mixmaster-XX.html#key-format http://pinger.mixmin.net/pubring.mix
b = append(make([]byte, extra), b...)
这种写法比使用strings.Repeat
更高效,祝你在接下来的问题中好运。 - OneOfOne