如何从 RSA 公钥的字节数组中获取 Little Endian 格式的指数和模数

问题描述

我有一个要求,我有一个 Little Endian 格式的字节数组作为输入。我需要从中获取指数和模数,创建一个公钥并使用它来加密数据。因此,我放置了以下代码

    exponentLen := 4
        exponentArr := key[:exponentLen] - ///Where key is the input byte array
        modulusstrOffset := exponentLen

        n := big.Int{}
        n.SetBytes(key[modulusstrOffset:])
        eb := big.Int{}
        eb.SetBytes(exponentArr)

        ex,err := strconv.Atoi(eb.String())
        if err != nil {
                return nil,errors.Wrap(err,"GetRsaPubKey: Strconv to int")
        }

        pubKey := rsa.PublicKey{N: &n,E: int(ex)}
cipherText,err := rsa.EncryptOAEP(sha256.New(),rand.Reader,pubKey,swk,nil) /// swk is the data to be encrypted

这段代码成功地加密了数据,没有抛出任何错误。 但是它在解密方面失败了。 这是因为 SetBytes() 假定输入字节数组是 Big Endian 格式(然而我们的字节数组是 LE)。所以评估的模数和指数是错误的。 有没有办法将输入数组的字节顺序从 LE 更改为 BE,然后以 Little Endian 格式创建指数和模数,然后创建公钥并将其用于加密。。请注意我尝试使用:

 var n1 big.Int
 n1.SetBits(n.Bits())

但问题仍然存在。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)