How to encrypt a string with a public key and decrypt with a private key?

I want to encrypt the password using the key from the server and decrypt the encrypted password on the server. this is the code i used in my application

/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package publicprivatekey; import java.security.*; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; import javax.crypto.*; /** * * @author Rajorshi */ public class PublicPrivateKey { public static String getEncrypted(String data, String Key) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidKeySpecException, IllegalBlockSizeException, BadPaddingException { Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(Base64.getDecoder().decode(Key.getBytes()))); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] encryptedbytes = cipher.doFinal(data.getBytes()); return new String(Base64.getEncoder().encode(encryptedbytes)); } public static String getDecrypted(String data, String Key) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); PrivateKey pk = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(Base64.getDecoder().decode(Key.getBytes()))); cipher.init(Cipher.DECRYPT_MODE, pk); byte[] encryptedbytes = cipher.doFinal(Base64.getDecoder().decode(data.getBytes())); return new String(encryptedbytes); } public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { // TODO code application logic here KeyGenerator keyGenerator = KeyGenerator.getInstance("Blowfish"); keyGenerator.init(448); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(1024); KeyPair keyPair = keyPairGenerator.genKeyPair(); String pubKey = new String(Base64.getEncoder().encode(keyPair.getPublic().getEncoded())); String priKey = new String(Base64.getEncoder().encode(keyPair.getPrivate().getEncoded())); System.out.println("Public Key:" + pubKey); System.out.println("Private Key:" + priKey); String cipherText = getEncrypted("hi this is a string", pubKey); System.out.println("CHIPHER:" + cipherText); String decryptedText = getDecrypted(cipherText, priKey); System.out.println("DECRYPTED STRING:" + decryptedText); } } 

I want to encrypt the password using the key from the server and decrypt the encrypted password on the server. this is the code i used in my application.

+6
source share
2 answers

If you are looking for a Java program for encrypting data with a public key and decrypting it using a private key, then here is the code (using the RSA algorithm):

 import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import javax.crypto.Cipher; /** * @author visruthcv * */ public class CryptographyUtil { private static final String ALGORITHM = "RSA"; public static byte[] encrypt(byte[] publicKey, byte[] inputData) throws Exception { PublicKey key = KeyFactory.getInstance(ALGORITHM) .generatePublic(new X509EncodedKeySpec(publicKey)); Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] encryptedBytes = cipher.doFinal(inputData); return encryptedBytes; } public static byte[] decrypt(byte[] privateKey, byte[] inputData) throws Exception { PrivateKey key = KeyFactory.getInstance(ALGORITHM) .generatePrivate(new PKCS8EncodedKeySpec(privateKey)); Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, key); byte[] decryptedBytes = cipher.doFinal(inputData); return decryptedBytes; } public static KeyPair generateKeyPair() throws NoSuchAlgorithmException, NoSuchProviderException { KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM); SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN"); // 512 is keysize keyGen.initialize(512, random); KeyPair generateKeyPair = keyGen.generateKeyPair(); return generateKeyPair; } public static void main(String[] args) throws Exception { KeyPair generateKeyPair = generateKeyPair(); byte[] publicKey = generateKeyPair.getPublic().getEncoded(); byte[] privateKey = generateKeyPair.getPrivate().getEncoded(); byte[] encryptedData = encrypt(publicKey, "hi this is Visruth here".getBytes()); byte[] decryptedData = decrypt(privateKey, encryptedData); System.out.println(new String(decryptedData)); } } 
+13
source

In fact, I found a solution that helped me:

 delete from "configuration" where 'automation#enabled'='false'; 
0
source

All Articles