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

在Java中如何实现简单的加密解密函数?

发布时间:2023-06-18 09:20:01

在Java中实现简单的加密解密函数有许多方法,本文将介绍三种最常见和基础的方法。

1. 替换法加密解密函数

替换法加密解密函数是一种非常简单且容易实现的加密解密方法,它通过将明文中的每个字符替换为与之对应的密文字符来实现加密,从而达到隐藏数据的目的。

加密函数代码实现:

public static String encrypt(String str) {
    char[] chars = str.toCharArray();
    for (int i = 0; i < chars.length; i++) {
        chars[i] = (char) (chars[i] + 3); //加上一个常数值3
    }
    return new String(chars);
}

解密函数代码实现:

public static String decrypt(String str) {
    char[] chars = str.toCharArray();
    for (int i = 0; i < chars.length; i++) {
        chars[i] = (char) (chars[i] - 3); //减去一个常数值3
    }
    return new String(chars);
}

2. 基于位运算的加密解密函数

基于位运算的加密解密函数是另一种常见而简单的加密解密方法,它通过将明文中每个字符的每一位都进行位运算,从而得到密文。

加密函数代码实现:

public static String encrypt(String str) {
    char[] chars = str.toCharArray();
    for (int i = 0; i < chars.length; i++) {
        chars[i] = (char) (chars[i] ^ 6688); //异或运算
    }
    return new String(chars);
}

解密函数代码实现:

public static String decrypt(String str) {
    char[] chars = str.toCharArray();
    for (int i = 0; i < chars.length; i++) {
        chars[i] = (char) (chars[i] ^ 6688);
    }
    return new String(chars);
}

3. 基于密钥的加密解密函数

基于密钥的加密解密函数是一种更加安全和可靠的加密解密方法,它需要先将密钥和明文按照一定的算法进行混淆,从而得到密文,必须使用相同的密钥才能得到正确的明文。

加密函数代码实现:

public static String encrypt(String str, String key) {
    try {
        byte[] rawKey = getRawKey(key.getBytes());
        byte[] encrypted = encrypt(rawKey, str.getBytes());
        return new String(Base64.encode(encrypted));
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

private static byte[] getRawKey(byte[] seed) throws Exception {
    KeyGenerator kgen = KeyGenerator.getInstance("AES");
    SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
    sr.setSeed(seed);
    kgen.init(128, sr);
    SecretKey skey = kgen.generateKey();
    byte[] raw = skey.getEncoded();
    return raw;
}

private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
    byte[] encrypted = cipher.doFinal(clear);
    return encrypted;
}

解密函数代码实现:

public static String decrypt(String str, String key) {
    try {
        byte[] rawKey = getRawKey(key.getBytes());
        byte[] encrypted = Base64.decode(str.getBytes());
        byte[] decrypted = decrypt(rawKey, encrypted);
        return new String(decrypted);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, skeySpec);
    byte[] decrypted = cipher.doFinal(encrypted);
    return decrypted;
}

综上所述,以上三种方法均可用于Java中实现简单的加密解密函数,其中第三种方法更加安全和可靠,适用于对数据安全性要求较高的场合。