| | |
| | | @Component |
| | | public class RSAPublicKeyExample { |
| | | |
| | | |
| | | /** |
| | | * 数据解密 |
| | | * |
| | | * @param encryptedData |
| | | * @return |
| | | */ |
| | | public String decryptedData(String encryptedData, String pri_key) { |
| | | String privateKeyString = "私钥的Base64编码字符串"; // 后端私钥的Base64编码字符串 |
| | | |
| | | try { |
| | | // 将私钥Base64编码字符串转换为PrivateKey对象 |
| | | byte[] privateKeyBytes = Base64.getDecoder().decode(pri_key); |
| | | PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes); |
| | | KeyFactory keyFactory = KeyFactory.getInstance("RSA"); |
| | | PrivateKey privateKey = keyFactory.generatePrivate(keySpec); |
| | | |
| | | // 使用私钥解密数据 |
| | | Cipher decryptCipher = Cipher.getInstance("RSA"); |
| | | decryptCipher.init(Cipher.DECRYPT_MODE, privateKey); |
| | | byte[] decryptedBytes = decryptCipher.doFinal(Base64.getDecoder().decode(encryptedData)); |
| | | |
| | | // 解密后的数据 |
| | | String decryptedData = new String(decryptedBytes); |
| | | System.out.println("解密后的数据:" + decryptedData); |
| | | return decryptedData; |
| | | } catch (Exception e) { |
| | | log.error("解密报错了:{}", e.getMessage()); |
| | | } |
| | | return null; |
| | | } |
| | | // |
| | | // /** |
| | | // * 数据解密 |
| | | // * |
| | | // * @param encryptedData |
| | | // * @return |
| | | // */ |
| | | // public String decryptedData(String encryptedData, String pri_key) { |
| | | // String privateKeyString = "私钥的Base64编码字符串"; // 后端私钥的Base64编码字符串 |
| | | // |
| | | // try { |
| | | // // 将私钥Base64编码字符串转换为PrivateKey对象 |
| | | // byte[] privateKeyBytes = Base64.getDecoder().decode(pri_key); |
| | | // PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes); |
| | | // KeyFactory keyFactory = KeyFactory.getInstance("RSA"); |
| | | // PrivateKey privateKey = keyFactory.generatePrivate(keySpec); |
| | | // |
| | | // // 使用私钥解密数据 |
| | | // Cipher decryptCipher = Cipher.getInstance("RSA"); |
| | | // decryptCipher.init(Cipher.DECRYPT_MODE, privateKey); |
| | | // byte[] decryptedBytes = decryptCipher.doFinal(Base64.getDecoder().decode(encryptedData)); |
| | | // |
| | | // // 解密后的数据 |
| | | // String decryptedData = new String(decryptedBytes); |
| | | // System.out.println("解密后的数据:" + decryptedData); |
| | | // return decryptedData; |
| | | // } catch (Exception e) { |
| | | // log.error("解密报错了:{}", e.getMessage()); |
| | | // } |
| | | // return null; |
| | | // } |
| | | // |
| | | // /** |
| | | // * 要加密的明文数据 |
| | | // * |
| | | // * @param plainText |
| | | // * @return |
| | | // */ |
| | | // public String encryptedData(String plainText, String pub_key) { |
| | | // log.info("需要加密的数据:{}", plainText); |
| | | // try { |
| | | // |
| | | // byte[] publicKeyBytes = Base64.getDecoder().decode(pub_key); |
| | | // X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes); |
| | | // KeyFactory keyFactory = KeyFactory.getInstance("RSA"); |
| | | // PublicKey publicKey = keyFactory.generatePublic(keySpec); |
| | | // |
| | | // // 使用公钥加密数据 |
| | | // Cipher encryptCipher = Cipher.getInstance("RSA"); |
| | | // encryptCipher.init(Cipher.ENCRYPT_MODE, publicKey); |
| | | // byte[] encryptedBytes = encryptCipher.doFinal(plainText.getBytes()); |
| | | // |
| | | // // 将加密后的数据转换为Base64编码的字符串 |
| | | // String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes); |
| | | // log.info("Base64加密后的数据:{}", encryptedText); |
| | | // encryptedText = URLEncoder.encode(encryptedText, StandardCharsets.UTF_8.toString()); |
| | | // log.info("URLEncoder编码后的数据:{}", encryptedText); |
| | | // String decodedString = URLDecoder.decode(encryptedText, "UTF-8"); |
| | | // log.info("URLEncoder解码后的数据:{}", decodedString); |
| | | // return encryptedText; |
| | | // } catch (Exception e) { |
| | | // log.error("加密失败了:{}", e.getMessage()); |
| | | // } |
| | | // return null; |
| | | // } |
| | | |
| | | /** |
| | | * 要加密的明文数据 |
| | |
| | | * @return |
| | | */ |
| | | public String encryptedData(String plainText, String pub_key) { |
| | | log.info("需要加密的数据:{}", plainText); |
| | | try { |
| | | |
| | | byte[] publicKeyBytes = Base64.getDecoder().decode(pub_key); |
| | | X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes); |
| | | KeyFactory keyFactory = KeyFactory.getInstance("RSA"); |
| | | PublicKey publicKey = keyFactory.generatePublic(keySpec); |
| | | |
| | | // 使用公钥加密数据 |
| | | Cipher encryptCipher = Cipher.getInstance("RSA"); |
| | | Cipher encryptCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); |
| | | encryptCipher.init(Cipher.ENCRYPT_MODE, publicKey); |
| | | byte[] encryptedBytes = encryptCipher.doFinal(plainText.getBytes()); |
| | | byte[] encryptedBytes = encryptCipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8)); |
| | | |
| | | // 将加密后的数据转换为Base64编码的字符串 |
| | | String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes); |
| | | log.info("Base64加密后的数据:{}", encryptedText); |
| | | encryptedText = URLEncoder.encode(encryptedText, StandardCharsets.UTF_8.toString()); |
| | | log.info("URLEncoder编码后的数据:{}", encryptedText); |
| | | String decodedString = URLDecoder.decode(encryptedText, "UTF-8"); |
| | | log.info("URLEncoder解码后的数据:{}", decodedString); |
| | | return encryptedText; |
| | | // URL Safe Base64 编码 |
| | | return Base64.getUrlEncoder().encodeToString(encryptedBytes); |
| | | } catch (Exception e) { |
| | | log.error("加密失败了:{}", e.getMessage()); |
| | | log.error("加密失败: {}", e.getMessage()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 数据解密 |
| | | * |
| | | * @param encryptedData |
| | | * @return |
| | | */ |
| | | public String decryptedData(String encryptedData, String pri_key) { |
| | | try { |
| | | // 将私钥Base64编码字符串转换为PrivateKey对象 |
| | | byte[] privateKeyBytes = Base64.getDecoder().decode(pri_key); |
| | | PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes); |
| | | KeyFactory keyFactory = KeyFactory.getInstance("RSA"); |
| | | PrivateKey privateKey = keyFactory.generatePrivate(keySpec); |
| | | |
| | | // URL Safe Base64 解码 |
| | | byte[] cipherBytes = Base64.getUrlDecoder().decode(encryptedData); |
| | | |
| | | // 使用私钥解密数据 |
| | | Cipher decryptCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); |
| | | decryptCipher.init(Cipher.DECRYPT_MODE, privateKey); |
| | | byte[] decryptedBytes = decryptCipher.doFinal(cipherBytes); |
| | | |
| | | return new String(decryptedBytes, StandardCharsets.UTF_8); |
| | | } catch (Exception e) { |
| | | log.error("解密失败: {}", e.getMessage()); |
| | | } |
| | | return null; |
| | | } |