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

如何使用Java实现基础加密算法的函数

发布时间:2023-09-30 04:59:11

在Java中,我们可以使用一些现成的库和算法实现基础的加密算法。下面我们将介绍如何使用Java实现几种常见的加密算法,包括MD5、SHA、AES和RSA。

首先,我们需要导入Java标准库中的相关类和包,如java.security和javax.crypto。然后我们就可以使用这些类来实现加密算法了。

1. MD5算法:

MD5是一种常见的消息摘要算法,跟SHA算法一样用于校验数据完整性。在Java中,可以通过java.security.MessageDigest类来实现MD5算法。

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

public class MD5Example {

    public static String getMD5(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] digest = md.digest(input.getBytes());
            StringBuilder sb = new StringBuilder();
            for (byte b : digest) {
                sb.append(String.format("%02x", b & 0xff));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }
    
    public static void main(String[] args) {
        String input = "Hello World";
        String md5 = getMD5(input);
        System.out.println(md5);
    }
}

2. SHA算法:

SHA是一族安全散列算法,常用的有SHA-1、SHA-256等。在Java中,可以通过java.security.MessageDigest类实现SHA算法。

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

public class SHAExample {

    public static String getSHA(String input, String algorithm) {
        try {
            MessageDigest md = MessageDigest.getInstance(algorithm);
            byte[] digest = md.digest(input.getBytes());
            StringBuilder sb = new StringBuilder();
            for (byte b : digest) {
                sb.append(String.format("%02x", b & 0xff));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }
    
    public static void main(String[] args) {
        String input = "Hello World";
        String sha1 = getSHA(input, "SHA-1");
        System.out.println(sha1);
        String sha256 = getSHA(input, "SHA-256");
        System.out.println(sha256);
    }
}

3. AES算法:

AES是一种对称加密算法,常用于对称加密和解密数据。在Java中,可以通过javax.crypto.Cipher类来实现AES算法。

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

public class AESEncryptionExample {

    public static String encryptAES(String input, SecretKey key) {
        try {
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] encrypted = cipher.doFinal(input.getBytes());
            return Base64.getEncoder().encodeToString(encrypted);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static String decryptAES(String input, SecretKey key) {
        try {
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, key);
            byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(input));
            return new String(decrypted);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    
    public static void main(String[] args) {
        try {
            KeyGenerator keyGen = KeyGenerator.getInstance("AES");
            keyGen.init(128);
            SecretKey key = keyGen.generateKey();
            
            String input = "Hello World";
            String encrypted = encryptAES(input, key);
            System.out.println(encrypted);
            
            String decrypted = decryptAES(encrypted, key);
            System.out.println(decrypted);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}

4. RSA算法:

RSA是一种非对称加密算法,常用于密钥交换和数字签名。在Java中,可以通过java.security.KeyPairGenerator类来生成RSA密钥对,并使用javax.crypto.Cipher类来实现RSA加解密。

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

public class RSAEncryptionExample {

    public static byte[] encryptRSA(String input, PublicKey publicKey) {
        try {
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            return cipher.doFinal(input.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static String decryptRSA(byte[] input, PrivateKey privateKey) {
        try {
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            byte[] decrypted = cipher.doFinal(input);
            return new String(decrypted);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static void main(String[] args) {
        try {
            KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
            keyGen.initialize(2048);
            KeyPair keyPair = keyGen.generateKeyPair();
            PublicKey publicKey = keyPair.getPublic();
            PrivateKey privateKey = keyPair.getPrivate();

            String input = "Hello World";
            byte[] encrypted = encryptRSA(input, publicKey);
            System.out.println(encrypted);

            String decrypted = decryptRSA(encrypted, privateKey);
            System.out.println(decrypted);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

以上就是使用Java实现基础加密算法的函数的示例代码。通过这些示例代码,我们可以实现常见的加密和解密操作,来保护我们的数据安全。