欢迎访问宙启技术站
智能推送

Java函数实现数据加密和解密操作

发布时间:2023-06-04 18:10:09

Java语言提供了多种加密和解密算法来保证数据的安全性,本文将介绍如何实现通过Java函数来进行数据加密和解密操作。

一、对称加密算法

对称加密算法是一种密钥加密算法,它的特点是加密和解密使用同一个密钥。Java中常用的对称加密算法有DES、AES等。

1.DES加密和解密

DES(Data Encryption Standard)是一种使用密钥加密的对称块加密算法。Java中实现DES加密和解密需要使用Cipher类。

DES加密代码实现:

public static String desEncrypt(String source, String key) {
    try {
        // 得到Cipher对象来实现对称加密
        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes("UTF-8"), "DES"), iv);
        byte[] result = cipher.doFinal(source.getBytes());
        // Base64编码
        return Base64.encodeBase64String(result);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

DES解密代码实现:

public static String desDecrypt(String source, String key) {
    try {
        byte[] bytes = Base64.decodeBase64(source);
        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes("UTF-8"), "DES"), iv);
        byte[] result = cipher.doFinal(bytes);
        return new String(result);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

2.AES加密和解密

AES(Advanced Encryption Standard)是一种高级的对称块加密算法。Java中实现AES加密和解密同样需要使用Cipher类。

AES加密代码实现:

public static String aesEncrypt(String source, String key) {
    try {
        // 得到Cipher对象来实现对称加密
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes("UTF-8"), "AES"), iv);
        byte[] result = cipher.doFinal(source.getBytes());
        // Base64编码
        return Base64.encodeBase64String(result);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

AES解密代码实现:

public static String aesDecrypt(String source, String key) {
    try {
        byte[] bytes = Base64.decodeBase64(source);
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes("UTF-8"), "AES"), iv);
        byte[] result = cipher.doFinal(bytes);
        return new String(result);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

二、非对称加密算法

非对称加密算法是一种密钥加密算法,它的特点是加密和解密使用不同的密钥,其中一个是公开密钥,另一个是私有密钥。Java中实现非对称加密和解密需要使用PublicKey和PrivateKey类。

1.RSA加密和解密

RSA是一种非对称加密算法,它使用公开密钥加密和私有密钥解密。Java中实现RSA加密和解密需要使用PublicKey和PrivateKey类。

RSA加密代码实现:

public static String rsaEncrypt(String source, String publicKeyStr) {
    try {
        byte[] sourceBytes = source.getBytes();
        // 获取公钥
        X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyStr));
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
        // 使用公钥加密
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] result = cipher.doFinal(sourceBytes);
        // Base64编码
        return Base64.encodeBase64String(result);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

RSA解密代码实现:

public static String rsaDecrypt(String source, String privateKeyStr) {
    try {
        byte[] sourceBytes = Base64.decodeBase64(source);
        // 获取私钥
        PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyStr));
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
        // 使用私钥解密
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] result = cipher.doFinal(sourceBytes);
        return new String(result);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

2.ECC加密和解密

ECC是一种基于椭圆曲线密码学的非对称加密算法。Java中实现ECC加密和解密需要使用KeyPairGenerator类、ECPublicKey和ECPrivateKey类。

ECC加密代码实现:

public static String eccEncrypt(String source) {
    try {
        // 生成密钥对
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC");
        SecureRandom secureRandom = new SecureRandom();
        keyPairGenerator.initialize(new ECGenParameterSpec("secp256k1"), secureRandom);
        KeyPair keyPair = keyPairGenerator.genKeyPair();
        ECPublicKey publicKey = (ECPublicKey) keyPair.getPublic();
        ECPrivateKey privateKey = (ECPrivateKey) keyPair.getPrivate();
        // 使用公钥加密
        Cipher cipher = Cipher.getInstance("ECIES");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] result = cipher.doFinal(source.getBytes());
        // Base64编码
        return Base64.encodeBase64String(result);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

ECC解密代码实现:

public static String eccDecrypt(String source, String privateKeyStr) {
    try {
        byte[] sourceBytes = Base64.decodeBase64(source);
        PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyStr));
        KeyFactory keyFactory = KeyFactory.getInstance("EC");
        ECPrivateKey privateKey = (ECPrivateKey) keyFactory.generatePrivate(pkcs8EncodedKeySpec);
        // 使用私钥解密
        Cipher cipher = Cipher.getInstance("ECIES");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] result = cipher.doFinal(sourceBytes);
        return new String(result);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

三、哈希算法

哈希算法又称散列算法,它将任意长度的输入(又叫做预映射)通过哈希算法变换成固定长度的输出,该输出即为哈希值。Java中实现哈希算法需要使用MessageDigest类。

1.MD5

MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希算法,由于它的输出长度固定,所以经常被用来存储密码等敏感信息。Java中实现MD5需要使用MessageDigest类。

MD5加密代码实现:

public static String md5Encrypt(String source) {
    try {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] result = md5.digest(source.getBytes());
        // 转成16进制字符串
        StringBuilder sb = new StringBuilder();
        for (byte b : result) {
            sb.append(String.format("%02X", b));
        }
        return sb.toString();
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

2.SHA

SHA(Secure Hash Algorithm)是一种安全性更高的哈希算法。Java中实现SHA需要使用MessageDigest类。

SHA加密代码实现:

`Java

public static String shaEncrypt(String source) {

try {

MessageDigest sha = MessageDigest.getInstance("SHA-256");

byte