Это прекрасно подходит.
Вы, по-видимому, думаете, что
using (IDisposable disposable = GetSomeDisposable())
{
//.....
//......
return Stg();
}
вслепую переводится в:
IDisposable disposable = GetSomeDisposable()
//.....
//......
return Stg();
disposable.Dispose();
, Который, по общему признанию, был бы проблемой и сделает using
оператор довольно бессмысленный---, который является, почему это не , что это делает.
компилятор удостоверяется, что объект расположен, прежде чем управление оставляет блок - независимо от того, как это оставляет блок.
Прежде всего, я не понимаю, почему вы планируете использовать 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
.
Вы не можете зашифровать с помощью закрытого ключа. Если JCE позволяет вам это сделать, то это просто случайно.
Вам нужно использовать подпись. Вот фрагмент кода для этого,
signer = Signature.getInstance("SHA1withRSA");
signer.initSign(privateKey); // PKCS#8 is preferred
signer.update(dataToSign);
byte[] signature = signer.sign();
Не случайно разрешено шифрование с закрытым ключом. Если вы хотите разбить подпись на индивидуальное хеширование и шифрование, тогда шифрование с помощью закрытого ключа имеет важное значение. Допустим, у меня есть документ, который мне нужно подписать, а мой ключ находится в сетевом HSM. Теперь либо я передаю весь документ в HSM для подписи, либо могу создать локальный хэш и передать его в HSM только для шифрования. Мой выбор будет зависеть от того, даст ли мне вычисление локального хеша лучшую производительность, а именно: а именно делегированное вычисление хэша с задержкой в сети.