Java加密解密用法介绍


在Java中,我们可以很容易地使用内置的加密和解密API进行数据安全性处理。主要使用的是Java Cryptography Extension (JCE) 和Java Cryptography Architecture (JCA)库来实现这些安全措施。

一、基于单向哈希算法的加密

单向哈希算法,如MD5,SHA-1,SHA-256等,是常用的加密方式。这些算法有一个共性,就是它们都是不可逆的。

以下是一个使用SHA-256加密的代码例:

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

public class EncryptionExample {
    public static String encrypt(String data, String algorithm) {
        try {
            MessageDigest md = MessageDigest.getInstance(algorithm);
            md.update(data.getBytes());
            byte[] resultBytes = md.digest();
            StringBuilder sb = new StringBuilder();
            for(byte b : resultBytes){
                sb.append(String.format("%02x", b));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        String data = "Hello World";
        System.out.println("Original: " + data);
        System.out.println("SHA-256: " + encrypt(data, "SHA-256"));
    }
}

二、对称加密与解密

对称加密算法如AES、DES,是一种加密和解密使用相同秘钥的方式。

下面是一个使用AES加密和解密的例子:

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

public class AESEncryptionExample {
    public static void main(String[] args) {
        try {
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
            keyGenerator.init(128);
            SecretKey key = keyGenerator.generateKey();

            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] encrypted = cipher.doFinal("Hello World".getBytes());

            cipher.init(Cipher.DECRYPT_MODE, key);
            byte[] original = cipher.doFinal(encrypted);
            System.out.println(new String(original));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

三、非对称加密与解密

非对称加密算法,如RSA,使用一对公密钥进行加密和解密。通常公钥用于加密,私钥用于解密。

以下是使用非对称加密方式RSA加密和解密的代码:

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

public class RSAEncryptionExample {
    public static void main(String[] args) {
        try {
            KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
            keyPairGen.initialize(1024);
            KeyPair pair = keyPairGen.generateKeyPair();
            PublicKey publicKey = pair.getPublic();
            PrivateKey privateKey = pair.getPrivate();

            Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            byte[] encrypted = cipher.doFinal("Hello World".getBytes());

            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            byte[] original = cipher.doFinal(encrypted);
            System.out.println(new String(original));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

评论关闭