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

利用Java实现常用的加密和解密函数

发布时间:2023-06-03 16:19:07

Java提供了多种加密和解密算法,可以通过Java内置的API来使用它们。以下是最常用的加密和解密算法及其实现方式:

1. BASE64加密/解密

BASE64是一种将二进制数据编码成ASCII字符的方法,常用于在邮件传输、网络传输以及代码表达中。在Java中,可以使用Base64类来实现BASE64编码和解码。Base64类有两种编码方式:Basic和URL,并且可以选择是否进行URL和MIME编码。

示例代码:

import java.util.Base64;

public class Base64Test {
    public static void main(String[] args) {
        String input = "hello world";
        String encoded = Base64.getEncoder().encodeToString(input.getBytes());
        System.out.println(encoded);  // aGVsbG8gd29ybGQ=
        
        byte[] decoded = Base64.getDecoder().decode(encoded);
        System.out.println(new String(decoded));  // hello world
    }
}

2. MD5加密

MD5是一种常用的不可逆加密算法,可以将任意长度的数据加密成一个固定长度的摘要。在Java中,可以使用MessageDigest类来实现MD5加密。

示例代码:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Test {
    public static void main(String[] args) throws NoSuchAlgorithmException {
        String input = "hello world";
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] hashed = md.digest(input.getBytes());
        StringBuilder sb = new StringBuilder();
        for (byte b : hashed) {
            sb.append(String.format("%02x", b));
        }
        System.out.println(sb.toString());  // 5eb63bbbe01eeed093cb22bb8f5acdc3
    }
}

3. SHA-1加密

SHA-1是一种比MD5更安全的不可逆加密算法,同样可以将任意长度的数据加密成一个固定长度的摘要。在Java中,可以使用MessageDigest类来实现SHA-1加密。

示例代码:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA1Test {
    public static void main(String[] args) throws NoSuchAlgorithmException {
        String input = "hello world";
        MessageDigest md = MessageDigest.getInstance("SHA-1");
        byte[] hashed = md.digest(input.getBytes());
        StringBuilder sb = new StringBuilder();
        for (byte b : hashed) {
            sb.append(String.format("%02x", b));
        }
        System.out.println(sb.toString());  // 2ef7bde608ce5404e97d5f042f95f89f1c232871
    }
}

4. DES加密/解密

DES是一种对称加密算法,可以实现加密和解密。在Java中,可以使用javax.crypto包中的Cipher类来实现DES加密和解密。Cipher类有多种加密和解密模式,如ECB、CBC、CFB、OFB等。

示例代码:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

public class DestTest {
    public static void main(String[] args) throws Exception {
        String input = "hello world";
        KeyGenerator keyGen = KeyGenerator.getInstance("DES");
        SecretKey key = keyGen.generateKey();

        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encrypted = cipher.doFinal(input.getBytes());
        System.out.println(new String(encrypted));  // 某一随机字符串

        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] decrypted = cipher.doFinal(encrypted);
        System.out.println(new String(decrypted));  // hello world
    }
}

5. RSA加密/解密

RSA是一种非对称加密算法,可以实现加密和解密。在Java中,可以使用javax.crypto包中的Cipher类来实现RSA加密和解密。需要注意的是,在RSA加密和解密中,需要获取公钥和私钥,可以使用KeyPairGenerator类来生成。

示例代码:

import javax.crypto.Cipher;
import java.security.KeyPairGenerator;
import java.security.KeyPair;
import java.security.PublicKey;
import java.security.PrivateKey;

public class RsaTest {
    public static void main(String[] args) throws Exception {
        String input = "hello world";
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        keyGen.initialize(2048);
        KeyPair keyPair = keyGen.generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();

        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encrypted = cipher.doFinal(input.getBytes());
        System.out.println(new String(encrypted));  // 某一随机字符串

        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decrypted = cipher.doFinal(encrypted);
        System.out.println(new String(decrypted));  // hello world
    }
}

总结:

通过Java内置的API,可以轻松实现常用的加密和解密算法,如BASE64、MD5、SHA-1、DES和RSA。根据具体需求,可以选择不同的加密算法和加密模式来保障数据的安全性。