当前位置: 首页> 科技> IT业 > Java常见加密解密算法工具Util整合

Java常见加密解密算法工具Util整合

时间:2025/7/14 5:24:03来源:https://blog.csdn.net/xhom_w/article/details/141938461 浏览次数:0次

废话不多说,直接上代码

  • 源码
package com.visy.utils;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Signature;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import java.util.Objects;
import java.util.function.Function;/*** 加密工具* @author visy.wang* @date 2024/9/5 10:29*/
public class EncryptionUtil {private static final Logger logger = LoggerFactory.getLogger(EncryptionUtil.class);public static class BASE64 {public static Base64.Encoder encoder = Base64.getEncoder();public static Base64.Decoder decoder = Base64.getDecoder();//对URL的编码方式,替换“+” “/” “-”为“_”public static Base64.Encoder urlEncoder = Base64.getUrlEncoder();public static Base64.Decoder urlDecoder = Base64.getUrlDecoder();public static byte[] encode(byte[] data) {return encoder.encode(data);}public static String encodeToStr(byte[] data) {return new String(encode(data), StandardCharsets.UTF_8);}public static String encode(String data) {byte[] bytes = data.getBytes(StandardCharsets.UTF_8);return new String(encode(bytes), StandardCharsets.UTF_8);}public static byte[] encodeToBytes(String data) {return encode(data.getBytes(StandardCharsets.UTF_8));}public static byte[] urlEncode(byte[] data) {return urlEncoder.encode(data);}public static String urlEncode(String data) {byte[] bytes = data.getBytes(StandardCharsets.UTF_8);return new String(urlEncode(bytes), StandardCharsets.UTF_8);}public static byte[] decode(byte[] data) {return decoder.decode(data);}public static String decodeToStr(byte[] data) {return new String(decode(data), StandardCharsets.UTF_8);}public static String decode(String data) {byte[] bytes = data.getBytes(StandardCharsets.UTF_8);return new String(decode(bytes), StandardCharsets.UTF_8);}public static byte[] decodeToBytes(String data) {return decode(data.getBytes(StandardCharsets.UTF_8));}public static byte[] urlDecode(byte[] data) {return urlDecoder.decode(data);}public static String urlDecode(String data) {byte[] bytes = data.getBytes(StandardCharsets.UTF_8);return new String(urlDecode(bytes), StandardCharsets.UTF_8);}}@Datapublic static class StrKeyPair {private String publicKey;private String privateKey;public static StrKeyPair of(String publicKey, String privateKey){StrKeyPair keyPair = new StrKeyPair();keyPair.setPublicKey(publicKey);keyPair.setPrivateKey(privateKey);return keyPair;}}@Getter@AllArgsConstructorpublic enum Encryptor {AES("AES", "AES/CBC/PKCS5Padding", Encryptor::getAESKeySpec),DES("DES", "DES/ECB/PKCS5Padding", Encryptor::getDESKeySpec),DES3("DESede", "DESede", Encryptor::getDESedeKeySpec),RC4("RC4", "RC4", Encryptor::getRC4KeySpec),RSA("RSA", "RSA", null),DSA("DSA", "SHA256withDSA", null);private final String algorithm;private final String cipher;private final Function<byte[], SecretKey> keyCreator;public SecretKey getSecretKey(byte[] key){return keyCreator.apply(key);}public SecretKey getSecretKey(KeySpec keySpec) throws NoSuchAlgorithmException, InvalidKeySpecException {SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(getAlgorithm());return keyFactory.generateSecret(keySpec);}private static SecretKey getAESKeySpec(byte[] key){return new SecretKeySpec(key, AES.getAlgorithm());}private static SecretKey getRC4KeySpec(byte[] key){return new SecretKeySpec(key, RC4.getAlgorithm());}private static SecretKey getDESKeySpec(byte[] key){try {return DES.getSecretKey(new DESKeySpec(key));} catch (Exception e) {throw new RuntimeException(e);}}private static SecretKey getDESedeKeySpec(byte[] key){try {return DES3.getSecretKey(new DESedeKeySpec(key));} catch (Exception e) {throw new RuntimeException(e);}}}/*** 对称加密*/public static class SymmetricEncryption {/*** 初始化向量的长度*/private static final int IV_LENGTH = 16;/*** 生成密匙* @param encryptor 加密器* @return 密匙*/public static String generateKey(Encryptor encryptor) {return generateKey(encryptor, null);}/*** 生成密匙* @param encryptor 加密器* @param size 密匙长度* @return 密匙*/public static String generateKey(Encryptor encryptor, Integer size) {String algorithm = encryptor.getAlgorithm();try {KeyGenerator generator = KeyGenerator.getInstance(algorithm);if(Objects.isNull(size)){generator.init(new SecureRandom());}else{generator.init(size, new SecureRandom());}byte[] key = generator.generateKey().getEncoded();return BASE64.encodeToStr(key);} catch (NoSuchAlgorithmException e) {throw EncryptException.of(algorithm+"生成密匙异常", e);}}/*** 加密* @param data 明文* @param key 密匙* @param encryptor 加密器* @return 密文*/public static String encrypt(String data, String key, Encryptor encryptor) {String algorithm = encryptor.getAlgorithm();try {SecureRandom sr = new SecureRandom();String cipherName = encryptor.getCipher();Cipher cipher = Cipher.getInstance(cipherName);byte[] plaintext = data.getBytes(StandardCharsets.UTF_8);SecretKey secretKey = encryptor.getSecretKey(BASE64.decodeToBytes(key));if(cipherName.contains("/CBC/")){//CBC模式,需要生成一个16位的初始化向量,同一明文每次生成的密文不一样(类似于加盐)byte[] iv = sr.generateSeed(IV_LENGTH);cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(iv));byte[] ciphertext = cipher.doFinal(plaintext);//拼接iv和加密结果byte[] result = new byte[iv.length + ciphertext.length];System.arraycopy(iv, 0, result, 0, iv.length);System.arraycopy(ciphertext, 0, result, iv.length, ciphertext.length);return BASE64.encodeToStr(result);}else{//ECB模式,不需要初始化向量,同一明文每次生成的密文一样cipher.init(Cipher.ENCRYPT_MODE, secretKey, sr);byte[] ciphertext = cipher.doFinal(plaintext);return BASE64.encodeToStr(ciphertext);}} catch (Exception e) {throw EncryptException.of(algorithm+"加密异常", e);}}/*** 解密* @param data 密文* @param key 密匙* @param encryptor 加密器* @return 明文*/public static String decrypt(String data, String key, Encryptor encryptor) {String algorithm = encryptor.getAlgorithm();try {byte[] ciphertext;String cipherName = encryptor.getCipher();byte[] dataBytes = BASE64.decodeToBytes(data);Cipher cipher = Cipher.getInstance(cipherName);SecretKey secretKey = encryptor.getSecretKey(BASE64.decodeToBytes(key));if(cipherName.contains("/CBC/")){//CBC模式//把data分割成IV和密文byte[] iv = new byte[IV_LENGTH];ciphertext = new byte[dataBytes.length-IV_LENGTH];System.arraycopy(dataBytes, 0, iv, 0, IV_LENGTH);//复制IVSystem.arraycopy(dataBytes, IV_LENGTH, ciphertext, 0, ciphertext.length);//复制密文cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iv));}else{//ECB模式ciphertext = dataBytes;cipher.init(Cipher.DECRYPT_MODE, secretKey, new SecureRandom());}byte[] plaintext = cipher.doFinal(ciphertext);return new String(plaintext, StandardCharsets.UTF_8);} catch (Exception e) {throw EncryptException.of(algorithm+"解密异常", e);}}}/*** 非对称加密*/public static class AsymmetricEncryption {/*** 生成密匙对* @param encryptor 加密器* @param size 密匙长度* @return 密匙对*/public static StrKeyPair generateKeyPair(Encryptor encryptor, Integer size){String algorithm = encryptor.getAlgorithm();try {KeyPairGenerator generator = KeyPairGenerator.getInstance(algorithm);generator.initialize(size, new SecureRandom());KeyPair keyPair = generator.generateKeyPair();String publicKey = BASE64.encodeToStr(keyPair.getPublic().getEncoded());String privateKey = BASE64.encodeToStr(keyPair.getPrivate().getEncoded());return StrKeyPair.of(publicKey, privateKey);}catch (NoSuchAlgorithmException e) {throw EncryptException.of(algorithm+"生成密匙对异常", e);}}/*** 加密* @param data 明文* @param pubKey 公钥* @param encryptor 加密器* @return 密文*/public static String encrypt(String data, String pubKey, Encryptor encryptor) {String algorithm = encryptor.getAlgorithm();try {byte[] plaintext = data.getBytes(StandardCharsets.UTF_8);KeyFactory keyFactory = KeyFactory.getInstance(algorithm);KeySpec keySpec = new X509EncodedKeySpec(BASE64.decodeToBytes(pubKey));PublicKey publicKey = keyFactory.generatePublic(keySpec);Cipher cipher = Cipher.getInstance(encryptor.getCipher());cipher.init(Cipher.ENCRYPT_MODE, publicKey, new SecureRandom());byte[] ciphertext = cipher.doFinal(plaintext);return BASE64.encodeToStr(ciphertext);} catch (Exception e) {throw EncryptException.of(algorithm+"加密异常", e);}}/*** 解密* @param data 密文* @param prikey 私钥* @param encryptor 加密器* @return 明文*/public static String decrypt(String data, String prikey, Encryptor encryptor) {String algorithm = encryptor.getAlgorithm();try {byte[] ciphertext = BASE64.decodeToBytes(data);KeyFactory keyFactory = KeyFactory.getInstance(algorithm);KeySpec keySpec = new PKCS8EncodedKeySpec(BASE64.decodeToBytes(prikey));PrivateKey privateKey = keyFactory.generatePrivate(keySpec);Cipher decryptCipher = Cipher.getInstance(encryptor.getCipher());decryptCipher.init(Cipher.DECRYPT_MODE, privateKey, new SecureRandom());byte[] plaintext = decryptCipher.doFinal(ciphertext);return new String(plaintext, StandardCharsets.UTF_8);} catch (Exception e) {throw EncryptException.of(algorithm+"解密异常", e);}}/*** 数字签名* @param data 数据* @param priKey 私钥* @return 签名*/public static String sign(String data, String priKey, Encryptor encryptor){String algorithm = encryptor.getAlgorithm();try {byte[] plaintext = BASE64.encodeToBytes(data);KeySpec keySpec = new PKCS8EncodedKeySpec(BASE64.decodeToBytes(priKey));KeyFactory keyFactory = KeyFactory.getInstance(algorithm);PrivateKey privateKey = keyFactory.generatePrivate(keySpec);Signature signature = Signature.getInstance(encryptor.getCipher());signature.initSign(privateKey);signature.update(plaintext);byte[] sign = signature.sign();return BASE64.encodeToStr(sign);} catch (Exception e) {throw EncryptException.of(algorithm+"签名异常", e);}}/*** 验签* @param data 数据* @param pubKey 公钥* @param sign 签名* @param encryptor 加密器* @return 是否验证通过*/public static boolean verify(String data, String pubKey, String sign, Encryptor encryptor){String algorithm = encryptor.getAlgorithm();try {byte[] plaintext = BASE64.encodeToBytes(data);KeySpec keySpec = new X509EncodedKeySpec(BASE64.decodeToBytes(pubKey));KeyFactory keyFactory = KeyFactory.getInstance(algorithm);PublicKey publicKey = keyFactory.generatePublic(keySpec);Signature signature = Signature.getInstance(encryptor.getCipher());signature.initVerify(publicKey);signature.update(plaintext);return signature.verify(BASE64.decodeToBytes(sign));} catch (Exception e) {logger.info("{}签名异常:{}", algorithm, e.getMessage(), e);return false;}}}/*** AES (Advanced Encryption Standard)* 对称加密* 是目前最流行的对称加密算法之一,支持128、192和256位的密钥长度*/public static class AES {public static String generateKey() {return SymmetricEncryption.generateKey(Encryptor.AES, 128);}public static String encrypt(String data, String key) {return SymmetricEncryption.encrypt(data, key, Encryptor.AES);}public static String decrypt(String data, String key) {return SymmetricEncryption.decrypt(data, key, Encryptor.AES);}}/*** DES (Data Encryption Standard)* 对称加密* 使用56位的密钥进行加密,已被证实可以在短时间内破解*/public static class DES {public static String generateKey() {return SymmetricEncryption.generateKey(Encryptor.DES, 56);}public static String encrypt(String data, String key) {return SymmetricEncryption.encrypt(data, key, Encryptor.DES);}public static String decrypt(String data, String key) {return SymmetricEncryption.decrypt(data, key, Encryptor.DES);}}/*** 3DES (Triple DES)* 对称加密* 是DES的改进版,使用168位的密钥进行加密*/public static class DES3 {public static String generateKey() {return SymmetricEncryption.generateKey(Encryptor.DES3, 168);}public static String encrypt(String data, String key) {return SymmetricEncryption.encrypt(data, key, Encryptor.DES3);}public static String decrypt(String data, String key) {return SymmetricEncryption.decrypt(data, key, Encryptor.DES3);}}/*** RC4 (Rivest Cipher 4)* 对称加密* 速度较快,但安全性较低,已被认为不够安全。*/public static class RC4 {public static String generateKey() {return SymmetricEncryption.generateKey(Encryptor.RC4);}public static String encrypt(String data, String key) {return SymmetricEncryption.encrypt(data, key, Encryptor.RC4);}public static String decrypt(String data, String key) {return SymmetricEncryption.decrypt(data, key, Encryptor.RC4);}}/*** SM4* 对称加密* 由我国国家密码管理局发布,常用于无线互联网加密等领域*/public static class SM4 {//TODO...//JDK未提供实现}/*** RSA (Rivest, Shamir, Adleman)* 非对称加密* 基于大数分解的困难性,经历了各种攻击但未被完全攻破*/public static class RSA {public static StrKeyPair generateKeyPair() {//密匙长度通常为1024或2048//可取值512、1024、2048和4096,最小512return AsymmetricEncryption.generateKeyPair(Encryptor.RSA, 512);}public static String encrypt(String data, String publicKey) {return AsymmetricEncryption.encrypt(data, publicKey, Encryptor.RSA);}public static String decrypt(String data, String privateKey) {return AsymmetricEncryption.decrypt(data, privateKey, Encryptor.RSA);}}/*** ECC (Elliptic Curve Cryptography)* 非对称加密* 使用椭圆曲线数学进行加密,安全性较高*/public static class ECC {//TODO...//JDK未提供实现,依赖于BouncyCastle实现}/*** DSA (Digital Signature Algorithm)* 非对称加密* 用于数字签名,确保信息的完整性和来源的真实性*/public static class DSA {public static StrKeyPair generateKeyPair() {return AsymmetricEncryption.generateKeyPair(Encryptor.DSA, 1024);}public static String sign(String data, String privateKey) {return AsymmetricEncryption.sign(data, privateKey, Encryptor.DSA);}public static boolean verify(String data, String publicKey, String sign) {return AsymmetricEncryption.verify(data, publicKey, sign, Encryptor.DSA);}}/*** SM2* 非对称加密* 中国的国家密码标准,类似于RSA。‌*/public static class SM2 {}/*** DH (Diffie-Hellman)* 非对称加密* 用于密钥交换,不直接用于加密和解密*/public static class DH {}public static class EncryptException extends RuntimeException{public EncryptException(String message, Throwable cause) {super(message, cause);}public static EncryptException of(String prefix, Exception e){return new EncryptException(prefix+":"+e.getMessage(), e.getCause());}}public static void main(String[] args) {String key = AES.generateKey();testAes("我是你爸爸", key);System.out.println("-----------------------------");testAes("我是你爸爸", key);System.out.println("-----------------------------");testDes("我是你爸爸");System.out.println("-----------------------------");testDes3("我是你爸爸");System.out.println("-----------------------------");testRc4("我是你爸爸");System.out.println("-----------------------------");testRsa("我是你爸爸");System.out.println("-----------------------------");testDsa("我是你爸爸");}private static void testAes(String data, String key){System.out.println("AES密匙: "+ key);System.out.println("AES明文: "+ data);String encrypt = AES.encrypt(data, key);System.out.println("AES加密: "+ encrypt);String decrypt = AES.decrypt(encrypt, key);System.out.println("AES解密: "+ decrypt);}private static void testDes(String data){String key = DES.generateKey();System.out.println("DES密匙: "+ key);System.out.println("DES明文: "+ data);String encrypt = DES.encrypt(data, key);System.out.println("DES加密: "+ encrypt);String decrypt = DES.decrypt(encrypt, key);System.out.println("DES解密: "+ decrypt);}private static void testDes3(String data){String key = DES3.generateKey();System.out.println("DES3密匙: "+ key);System.out.println("DES3明文: "+ data);String encrypt = DES3.encrypt(data, key);System.out.println("DES3加密: "+ encrypt);String decrypt = DES3.decrypt(encrypt, key);System.out.println("DES3解密: "+ decrypt);}private static void testRc4(String data){String key = RC4.generateKey();System.out.println("RC4密匙: "+ key);System.out.println("RC4明文: "+ data);String encrypt = RC4.encrypt(data, key);System.out.println("RC4加密: "+ encrypt);String decrypt = RC4.decrypt(encrypt, key);System.out.println("RC4解密: "+ decrypt);}private static void testRsa(String data){StrKeyPair keyPair = RSA.generateKeyPair();System.out.println("RSA密匙(公钥): "+ keyPair.getPublicKey());System.out.println("RSA密匙(私钥): "+ keyPair.getPrivateKey());System.out.println("RSA明文: "+ data);String encrypt = RSA.encrypt(data, keyPair.getPublicKey());System.out.println("RSA加密: "+ encrypt);String decrypt = RSA.decrypt(encrypt, keyPair.getPrivateKey());System.out.println("RSA解密: "+ decrypt);}private static void testDsa(String data){StrKeyPair keyPair = DSA.generateKeyPair();System.out.println("DSA密匙(公钥): "+ keyPair.getPublicKey());System.out.println("DSA密匙(私钥): "+ keyPair.getPrivateKey());System.out.println("DSA明文: "+ data);String sign = DSA.sign(data, keyPair.getPrivateKey());System.out.println("DSA签名: "+ sign);boolean verify = DSA.verify(data, keyPair.getPublicKey(), sign);System.out.println("DSA验签结果: "+ verify);}
}
  • 测试打印
AES密匙: bP0ziLzqrGTPihpZSb3I2A==
AES明文: 我是你爸爸
AES加密: RJ8eAvaIG08oshk0CpFDs3Elz9B/Qx1JpffmsI4JrMs=
AES解密: 我是你爸爸
-----------------------------
AES密匙: bP0ziLzqrGTPihpZSb3I2A==
AES明文: 我是你爸爸
AES加密: mcJpL8UK0CaW5UkQKzDwZEc/DsWMUoN752Kqo8Djl2A=
AES解密: 我是你爸爸
-----------------------------
DES密匙: v2G2JjJDI9k=
DES明文: 我是你爸爸
DES加密: gQldoHHYDI0lZMP7Qgbzzg==
DES解密: 我是你爸爸
-----------------------------
DES3密匙: OMFbm3P0p+mupKvcL4Yf9FKrsJGRraeJ
DES3明文: 我是你爸爸
DES3加密: 34FJ73LfgRSx8xzYH4eG7Q==
DES3解密: 我是你爸爸
-----------------------------
RC4密匙: ZgBeWXcxeM+4oxANzZtn+w==
RC4明文: 我是你爸爸
RC4加密: nrxPrZt93Wrv2ngeAGLD
RC4解密: 我是你爸爸
-----------------------------
RSA密匙(公钥): MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJb12Sr9mlMoxeBFhyDncrDkk4W0OPh4rfscQXR/9gVeEeP5INkreFctQX5pmJxsi8WrCitdMF0kwhNmX72wfbUCAwEAAQ==
RSA密匙(私钥): MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAlvXZKv2aUyjF4EWHIOdysOSThbQ4+Hit+xxBdH/2BV4R4/kg2St4Vy1BfmmYnGyLxasKK10wXSTCE2ZfvbB9tQIDAQABAkA3bg5Pus7vugjuUJlNe66hRUzly0cf9S/tBHMEU/gB//fPSVS8Y8CdE01olIXtdfDlXTRWFYPg2NjW6t+3o4ABAiEA055aZR7eBMbeJ4WX0jn++JmaBJuNIqNln2dLSpZj9YUCIQC2nsyl4TDjNufXStdoZ+s1muUsgWj4CnZZ/nMDFZAGcQIgRcJZwiPexGxaJ2UemyqLJqBb6VDtwZFjmpyOcVQKN5ECIEfQctHYmI0BjnJPcB4Sn6BY5T53NXw1QQ1qznesBxNBAiADz465d8/9hbXig7dLMFKSsjdEJJ0Y1RYtTX7XkT5JKw==
RSA明文: 我是你爸爸
RSA加密: YOUQoiCWzvctWWI+ouDxFAlsH8O5FOx3NPHwqEDFXpt10aftszACNr3GyjIVJ59pgodUChgwXtmTBjPkLsWqpw==
RSA解密: 我是你爸爸
-----------------------------
DSA密匙(公钥): MIIBuDCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYUAAoGBALjVG1o9JYl80sPqK2T67HfVlBR0hrGcJ2TwP8VI4rSQ1WGNn9MN9V7OZ5g/4VdDL+JDjmJPtvpf3aODauwGAjbV3ZNL3OKu2wLfIXqqdINU38fDrda/zYQkq21VicSt+9BAkZvlCX5sXonrFMR38Wo3NcrvoNPo2kbxGUvr6nkU
DSA密匙(私钥): MIIBSwIBADCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoEFgIUP3zWZKGxLYebqJTR/30e4BNmqfg=
DSA明文: 我是你爸爸
DSA签名: MCwCFFzInsUS6ZPeGfn+dnFz2zpHeFhJAhQlErjtU6mLrvEPsN94OlKB8+WrbA==
DSA验签结果: true
关键字:Java常见加密解密算法工具Util整合

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: