開心生活站

位置:首頁 > IT科技 > 

java,rsa私鑰加密

IT科技3.33W

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

java rsa私鑰加密是什麼?讓我們一起來了解一下吧!

java rsa私鑰加密是一種加密算法。私鑰加密算法是用私鑰來進行加密與解密信息。私鑰加密也被稱作對稱加密,原因是加密與解密使用的祕鑰是同一個。

java rsa私鑰加密

RSA加密需要注意的事項如下:

1. 首先產生公鑰與私鑰

2. 設計加密與解密的算法

3. 私鑰加密的數據信息只能由公鑰可以解密

4. 公鑰加密的數據信息只能由私鑰可以解密

實戰演練,具體步驟如下:

public class RsaCryptTools {    private static final String CHARSET = "utf-8";    private static final Base64.Decoder decoder64 = Base64.getDecoder();    private static final Base64.Encoder encoder64 = Base64.getEncoder();     /**     * 生成公私鑰     * @param keySize     * @return     * @throws NoSuchAlgorithmException     */    public static SecretKey generateSecretKey(int keySize) throws NoSuchAlgorithmException {        //生成密鑰對        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");        keyGen.initialize(keySize, new SecureRandom());        KeyPair pair = keyGen.generateKeyPair();        PrivateKey privateKey = pair.getPrivate();        PublicKey publicKey = pair.getPublic();        //這裏可以將密鑰對保存到本地        return new SecretKey(encoder64.encodeToString(publicKey.getEncoded()), encoder64.encodeToString(privateKey.getEncoded()));    }    /**     * 私鑰加密     * @param data     * @param privateInfoStr     * @return     * @throws IOException     * @throws InvalidCipherTextException     */    public static String encryptData(String data, String privateInfoStr) throws IOException, InvalidKeySpecException, NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException {         Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");        cipher.init(Cipher.ENCRYPT_MODE, getPrivateKey(privateInfoStr));        return encoder64.encodeToString(cipher.doFinal(data.getBytes(CHARSET)));    }     /**     * 公鑰解密     * @param data     * @param publicInfoStr     * @return     */    public static String decryptData(String data, String publicInfoStr) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, UnsupportedEncodingException {        byte[] encryptDataBytes=decoder64.decode(data.getBytes(CHARSET));        //解密        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");        cipher.init(Cipher.DECRYPT_MODE, getPublicKey(publicInfoStr));        return new String(cipher.doFinal(encryptDataBytes), CHARSET);    }    private static PublicKey getPublicKey(String base64PublicKey) throws NoSuchAlgorithmException, InvalidKeySpecException {        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(base64PublicKey.getBytes()));        KeyFactory keyFactory = KeyFactory.getInstance("RSA");        return keyFactory.generatePublic(keySpec);    }    private static PrivateKey getPrivateKey(String base64PrivateKey) throws NoSuchAlgorithmException, InvalidKeySpecException {        PrivateKey privateKey = null;        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(base64PrivateKey.getBytes()));        KeyFactory keyFactory = null;        keyFactory = KeyFactory.getInstance("RSA");        privateKey = keyFactory.generatePrivate(keySpec);        return privateKey;    }     /**     * 密鑰實體     * @author hank     * @since 2020/2/28 0028 下午 16:27     */    public static class SecretKey {        /**         * 公鑰         */        private String publicKey;        /**         * 私鑰         */        private String privateKey;         public SecretKey(String publicKey, String privateKey) {            this.publicKey = publicKey;            this.privateKey = privateKey;        }         public String getPublicKey() {            return publicKey;        }         public void setPublicKey(String publicKey) {            this.publicKey = publicKey;        }         public String getPrivateKey() {            return privateKey;        }         public void setPrivateKey(String privateKey) {            this.privateKey = privateKey;        }         @Override        public String toString() {            return "SecretKey{" +                    "publicKey='" + publicKey + ''' +                    ", privateKey='" + privateKey + ''' +                    '}';        }    }     private static void writeToFile(String path, byte[] key) throws IOException {        File f = new File(path);        f.getParentFile().mkdirs();         try(FileOutputStream fos = new FileOutputStream(f)) {            fos.write(key);            fos.flush();        }    }     public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, IOException, BadPaddingException, IllegalBlockSizeException, InvalidKeyException, InvalidKeySpecException {        SecretKey secretKey = generateSecretKey(2048);        System.out.println(secretKey);        String enStr = encryptData("你好測試測試", secretKey.getPrivateKey());        System.out.println(enStr);        String deStr = decryptData(enStr, secretKey.getPublicKey());        System.out.println(deStr);        enStr = encryptData("你好測試測試hello", secretKey.getPrivateKey());        System.out.println(enStr);        deStr = decryptData(enStr, secretKey.getPublicKey());        System.out.println(deStr);    } }

標籤:java 私鑰 rsa 加密