Преобразование из BigInteger в октет? - PullRequest
1 голос
/ 14 января 2011

Я пытаюсь вручную создать тег подписи для вызова веб-службы.Я получил доступ к сертификату из хранилища ключей и получил доступ к открытому ключу для сертификата.Теперь у меня проблема с преобразованием RSAKeyValue в тип ds: CryptoBinary.Код возвращает значение Biginteger для разности и показателя степени, и я ищу метод или алгоритм для преобразования их в октеты, а затем преобразования в Bas64.Вот мой код

RSAPublicKey rsaKey  = (RSAPublicKey)certificate.getPublicKey();
customSignature.Modulus = rsaKey.getModulus(); 
customSignature.Exponent = rsaKey.getPublicExponent();

Есть ли в Java какое-либо решение для преобразования целых чисел в представление октетов?

Ответы [ 2 ]

2 голосов
/ 14 января 2011

Попробуйте следующий код с использованием платформы кодеков Apache Commons:

BigInteger modulus = rsaKey.getModulus();
org.apache.commons.codec.binary.Base64.encodeBase64String(modulus.toByteArray());
0 голосов
/ 25 августа 2012

К сожалению, modulus.toByteArray() не отображается напрямую на тип ds: CryptoBinary цифровой подписи XML, что также требует удаления начальных нулевых октетов. Перед кодировкой base64

вам нужно сделать что-то подобное
byte[] modulusBytes = modulus.toByteArray();
int numLeadingZeroBytes = 0;
while( modulusBytes[numLeadingZeroBytes] == 0 )
    ++numLeadingZeroBytes;
if ( numLeadingZeroBytes > 0 ) {
    byte[] origModulusBytes = modulusBytes;
    modulusBytes = new byte[origModulusBytes.length - numLeadingZeroBytes];
    System.arraycopy(origModulusBytes,numLeadingZeroBytes,modulusBytes,0,modulusBytes.length);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...