Шифрование с закрытым ключом RSA в Java

Это прекрасно подходит.

Вы, по-видимому, думаете, что

using (IDisposable disposable = GetSomeDisposable())
{
    //.....
    //......
    return Stg();
}

вслепую переводится в:

IDisposable disposable = GetSomeDisposable()
//.....
//......
return Stg();
disposable.Dispose();

, Который, по общему признанию, был бы проблемой и сделает using оператор довольно бессмысленный---, который является, почему это не , что это делает.

компилятор удостоверяется, что объект расположен, прежде чем управление оставляет блок - независимо от того, как это оставляет блок.

10
задан Morten Kristensen 1 March 2014 в 21:44
поделиться

3 ответа

Прежде всего, я не понимаю, почему вы планируете использовать Cipher для шифрования закрытым ключом, а не подписывать подпись ]. Я не уверен, что все поставщики RSA Cipher будут использовать правильный тип блока для настройки, но попробовать стоит.

Однако, не говоря уже об этом, я думаю, что вы пытаетесь загрузить не -стандартный ключ в формате OpenSSL. Преобразование его в DER с помощью rsa , по сути, является просто декодированием base-64; структура ключа не является PKCS # 8.

Вместо этого после genrsa используйте команду openssl pkcs8 для преобразования сгенерированного ключа в незашифрованный PKCS # 8, формат DER:

openssl pkcs8 -topk8 -nocrypt -in private.pem -outform der -out private.der

В результате будет создан незашифрованный закрытый ключ, который можно загрузить с помощью PKCS8EncodedKeySpec .

6
ответ дан 3 December 2019 в 17:59
поделиться

Вы не можете зашифровать с помощью закрытого ключа. Если JCE позволяет вам это сделать, то это просто случайно.

Вам нужно использовать подпись. Вот фрагмент кода для этого,

signer = Signature.getInstance("SHA1withRSA");
signer.initSign(privateKey); // PKCS#8 is preferred
signer.update(dataToSign);
byte[] signature = signer.sign();
10
ответ дан 3 December 2019 в 17:59
поделиться

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

4
ответ дан 3 December 2019 в 17:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: