Untitled
unknown
plain_text
2 years ago
3.3 kB
5
Indexable
import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.security.*; import java.security.spec.EncodedKeySpec; import java.security.spec.InvalidKeySpecException; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; public class RSA{ /** * Store public key in a file * */ public static void storeKeys(PublicKey publicKey) throws IOException { try(FileOutputStream fos = new FileOutputStream("public.key")){ fos.write(publicKey.getEncoded()); } } /** * Read public key in a file and use KeyFactory to recreate the actual instance * */ public static void readKeyFile() throws IOException, NoSuchAlgorithmException, InvalidKeySpecException { File publicKeyFile = new File("public.key"); byte[] publicKeyBytes = Files.readAllBytes(publicKeyFile.toPath()); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKeyBytes); keyFactory.generatePublic(publicKeySpec); } public static byte[] encryptMessage(String secreteMessage, PublicKey publicKey) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { Cipher encryptCipher = Cipher.getInstance("RSA"); encryptCipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] secreteMessageBytes = secreteMessage.getBytes(StandardCharsets.UTF_8); byte[] encryptedMessageBytes = encryptCipher.doFinal(secreteMessageBytes); String encodedMessage = Base64.getEncoder().encodeToString(encryptedMessageBytes); System.out.println("Encrypt message: " + encodedMessage); return encryptedMessageBytes; } public static void decodedMessage(byte[] encryptedMessageBytes, PrivateKey privateKey) throws NoSuchPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException { Cipher decryptedCipher = Cipher.getInstance("RSA"); decryptedCipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] decryptedMessageBytes = decryptedCipher.doFinal(encryptedMessageBytes); String decryptedMessage = new String(decryptedMessageBytes, StandardCharsets.UTF_8); System.out.println("Decrypted message: " + decryptedMessage); } public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException { KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA"); generator.initialize(2048); KeyPair pair = generator.generateKeyPair(); PrivateKey privateKey = pair.getPrivate(); PublicKey publicKey = pair.getPublic(); String message = "Hello world"; byte[] encryptedMessageBytes = encryptMessage(message, publicKey); decodedMessage(encryptedMessageBytes, privateKey); } }
Editor is loading...
Leave a Comment