Как извлечь показатель степени и модуль в формате с малым конечным значением из массива байтов открытого ключа RSA

#go #cryptography #rsa #endianness #public-key-encryption

#Вперед #криптография #rsa #порядковый номер #шифрование с открытым ключом

Вопрос:

У меня есть требование, при котором у меня есть массив байтов в формате с небольшим конечным значением в качестве входных данных. Мне нужно извлечь из него экспоненту и модуль, создать открытый ключ и использовать его для шифрования данных. Поэтому я поместил следующий фрагмент кода:

     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: amp;n, E: int(ex)}
cipherText, err := rsa.EncryptOAEP(sha256.New(), rand.Reader, pubKey, swk, nil) /// swk is the data to be encrypted
 

Этот код успешно шифрует данные без каких-либо ошибок.
Однако это не удается на стороне дешифрования.
Это так, потому что SetBytes() предполагает, что входной массив байтов находится в формате большого конечного (однако наш массив байтов находится в файле). Таким образом, вычисленные модуль и показатель неверны.
Есть ли способ изменить порядок байтов входного массива из файла на BE, а затем создать экспоненты и модуль в формате Little Endian, а затем создать открытый ключ и использовать его для шифрования.. Пожалуйста, обратите внимание, что я пытался использовать:

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

но проблема сохраняется.