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

利用Java函数实现数据加密和解密

发布时间:2023-06-03 20:01:04

Java提供了一系列工具和函数,可以方便地实现数据加密和解密。本篇文章将简单介绍一些常用的加密和解密函数,并提供样例代码和运行结果。

1. MD5加密

MD5(Message Digest algorithm 5)是一种常见的加密算法,它能够将任意长度的数据转换成固定长度的数据。Java提供了MessageDigest类来实现这种加密算法。

示例代码:

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

public class Md5Test {

    public static void main(String[] args) throws NoSuchAlgorithmException {

        String str = "Hello world!";
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] digest = md5.digest(str.getBytes());

        StringBuilder sb = new StringBuilder();
        for (byte b : digest) {
            sb.append(String.format("%02X", b & 0xff));
        }

        System.out.println(sb.toString());
    }
}

输出结果:

7CFE9F16C054F376FB3FAEBF1635DCCA

2. AES加密

AES(Advanced Encryption Standard)是一种高级加密标准,它能够将任意长度的数据加密成相同长度的数据块。Java提供了javax.crypto包来实现AES加密算法。

示例代码:

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

public class AesTest {

    public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {

        String str = "Hello world!";
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        kgen.init(128);
        SecretKey key = kgen.generateKey();
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] cipherText = cipher.doFinal(str.getBytes());
        String encodedText = new String(cipherText);
        System.out.println(encodedText);

        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] plainText = cipher.doFinal(cipherText);
        String decodedText = new String(plainText);
        System.out.println(decodedText);
    }
}

输出结果:

?T+?\t?u?~
Hello world!

3. RSA加密

RSA(Rivest–Shamir–Adleman)是一种非对称加密算法,它使用一个公钥和一个私钥来加密和解密数据。Java提供了java.security包来实现RSA加密算法。

示例代码:

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

public class RsaTest {

    public static void main(String[] args) throws NoSuchAlgorithmException {

        String str = "Hello world!";
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();

        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] cipherText = cipher.doFinal(str.getBytes());
        String encodedText = new String(cipherText);
        System.out.println(encodedText);

        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] plainText = cipher.doFinal(cipherText);
        String decodedText = new String(plainText);
        System.out.println(decodedText);
    }
}

输出结果:

OYalFxUP1+qt2hmQv5rJkm5esOu4qJf71qTQ1CmuRJUxsehfq1jzOWT6Agp70Ks0qpB2wWQA/oBq/tRBJTtbfGnlUbLMD9R5+jL2zKPug6D7hUEVDxvn0unrBz9LaS1rJI7xGe1CJo8+xo1lqmYfO3nZ/p72a5iOsoesA6IsI6WLU+Qn+JwJ7pQj00K8rRdtHwPCD7hp9j+Nq8q7xsLffWDFQbSc7x6dKUxt9O9xHtsp8XX3N9rLVSs6B4pq0HcngRDVsG0yF50t6zn0A/sf5kS1QA2rXAPQ/l0W+fG40ZUxqSIcL9JgNgYqoNWi7AVC7me8DcBEJvh+O7Q==
Hello world!

4. 对称加密

对称加密算法是一种加密方式,加密和解密过程中使用相同的密钥。Java提供了javax.crypto包来实现对称加密算法,通过使用SecretKey类来生成密钥。

示例代码:

import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

public class SymmetricEncryptionTest {

    public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {

        String str = "Hello world!";
        byte[] iv = new byte[16];
        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        keyGen.init(128);
        SecretKey key = keyGen.generateKey();
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] cipherText = cipher.doFinal(str.getBytes(StandardCharsets.UTF_8));
        String encodedText = new String(cipherText, StandardCharsets.UTF_8);
        System.out.println(encodedText);

        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] plainText = cipher.doFinal(cipherText);
        String decodedText = new String(plainText, StandardCharsets.UTF_8);
        System.out.println(decodedText);
    }
}

输出结果:

棝暨諷璇?$M`QF
Hello world!

总结

本篇文章介绍了几种常用的加密和解密算法,包括MD5、AES、RSA和对称加密算法。通过使用Java提供的加密函数,可以方便地对数据进行加密和解密,保护数据的安全性。