Шифрование RSA с использованием существующего текстового файла открытого ключа в JAVA
У меня есть текстовый файл с открытым ключом(.txt), содержащий открытый ключ. Как я могу зашифровать любое входное строковое значение с помощью этого открытого ключа в JAVA?
Пожалуйста, укажите мне код для чтения текстового файла открытого ключа, который может быть расположен на любом из дисков, а затем зашифруйте любую строку с помощью этого открытого ключа.
Я написал приведенный ниже код, но он показывает сообщение об ошибке:
-Ява,служба безопасности.KeyStoreException: RSA не найден
Зашифрованные данные:=null"
Пожалуйста, помогите!
Что я уже пробовал:
Я попробовал следующий код, но я получаю сообщения об ошибках.
import java.security.KeyStore; import java.security.MessageDigest; import org.bouncycastle.crypto.params.AsymmetricKeyParameter; import java.security.PublicKey; import org.bouncycastle.crypto.CipherParameters; import org.bouncycastle.crypto.BufferedAsymmetricBlockCipher; import org.bouncycastle.crypto.Digest; import org.bouncycastle.crypto.AsymmetricBlockCipher; import org.bouncycastle.crypto.encodings.OAEPEncoding; import org.bouncycastle.crypto.digests.SHA1Digest; import org.bouncycastle.crypto.digests.SHA256Digest; import org.bouncycastle.crypto.engines.RSABlindedEngine; import org.bouncycastle.crypto.util.PublicKeyFactory; import java.io.InputStream; import java.security.cert.X509Certificate; import java.security.cert.CertificateFactory; import java.io.FileInputStream; import java.security.Provider; import java.security.Security; import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.Cipher; import java.io.InputStream; import java.security.*; //import java.util.Base64; @SuppressWarnings("unused") public class Encryption { public String encrypt(final String inputData) { String encryptedData = null; try { Security.addProvider((Provider)new BouncyCastleProvider()); final FileInputStream fin = new FileInputStream("D:/publickey.txt"); System.out.println("hello"+fin); final CertificateFactory cf = CertificateFactory.getInstance("X.509", "BC"); System.out.println("hello1"+cf); KeyStore keyStore = KeyStore.getInstance("RSA"); final java.security.cert.Certificate cert = keyStore.getCertificate("D:/publickey.txt"); System.out.println("hello2"+cert); final PublicKey pubkey = cert.getPublicKey(); final AsymmetricKeyParameter publicKeyParameter = PublicKeyFactory.createKey(pubkey.getEncoded()); final OAEPEncoding enCryptor = new OAEPEncoding((AsymmetricBlockCipher)new RSABlindedEngine(), (Digest)new SHA256Digest(), (Digest)new SHA1Digest(), (byte[])null); final BufferedAsymmetricBlockCipher cipher = new BufferedAsymmetricBlockCipher((AsymmetricBlockCipher)enCryptor); cipher.init(true, (CipherParameters)publicKeyParameter); cipher.processBytes(inputData.getBytes(), 0, inputData.length()); encryptedData = Base64.encodeBytes(cipher.doFinal()); } catch (Exception e) { System.out.println(e); } return encryptedData; } public String getSha256(final String value) { try { final MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(value.getBytes()); return this.bytesToHex(md.digest()); } catch (Exception ex) { throw new RuntimeException(ex); } } private String bytesToHex(final byte[] bytes) { final StringBuffer result = new StringBuffer(); for (final byte b : bytes) { result.append(Integer.toString((b & 0xFF) + 256, 16).substring(1)); } return result.toString(); } }
phil.o
Пожалуйста улучшите свой вопрос и предоставьте также сообщение(ы) об ошибке.