对称加密算法:DES加密和DESede加密和AES和PBE

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对称加密算法:DES加密和DESede加密和AES和PBE相关的知识,希望对你有一定的参考价值。

对称加密算法是说加密方和解密方使用相同的密钥.常见的对称加密算法包括4个,DES,DESede(3DES),AES,PBE.

本文讨论的内容是加密算法,不是Message Digest,不是编码.下面区分一下这三个概念.

加密算法是一对一映射,明文密文一一对应.加密是不明确的,是隐晦的.

信息摘要是一个密文对应多个明文,它只是明文整体的一个指纹,一个反映,一个摘要.

编码是一对一映射,是明确的,是显然易见的,比如base64编码.

DES(Data Encryption Standard)名叫数据加密标准.它明文分成64位一组分块加密,密钥也是64位.其中,密钥的第7,15,23,31,39,47,56,63位是为了凑成及校验位(保证一个字节中1的个数为奇数个),所以密钥实际有效位是56位.

java中的DES可以如下调用:

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class DES {
    private final static String KEY_DES = "DES"; 
    static String tos(byte[] b) {
        String ans = "";
        for (int i = 0; i < b.length; i++) {
            ans += String.format("%02X", b[i]);
        }
        return ans;
    }
    public static void main(String[] args)
            throws NoSuchAlgorithmException, InvalidKeyException,
            NoSuchPaddingException, InvalidKeySpecException,
            IllegalBlockSizeException, BadPaddingException {
        SecureRandom secure = new SecureRandom("weidiao".getBytes());;
        KeyGenerator generator = KeyGenerator.getInstance(KEY_DES);
        generator.init(secure);
        byte[] key = generator.generateKey().getEncoded();
        DESKeySpec dks = new DESKeySpec(key);
        SecretKeyFactory factory = SecretKeyFactory.getInstance(KEY_DES);
        SecretKey secretKey = factory.generateSecret(dks);
        // 当使用其他对称加密算法时,如AES、Blowfish等算法时,用下述代码替换上述三行代码
        // secretKey = new SecretKeySpec(key, KEY_DES);
        byte[] data = "123".getBytes();
        Cipher cipher = Cipher.getInstance(KEY_DES);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encrypt = cipher.doFinal(data);
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decrypt = cipher.doFinal(encrypt);
        System.out.println("DES密钥: " + tos(key));
        System.out.println("原始数据: " + tos(data));
        System.out.println("加密后: " + tos(encrypt));
        System.out.println("解密后:" + tos(decrypt));
    }
}

3DES并不是一种新的加密算法,而是在DES的基础上多运算了几次,使得加密效果更好,它充分利用了DES的可逆性,不像MD5,SHA密文到明文为一对多映射,DES的明文密文为一对一映射.

3DES算法又叫DESede算法,e表示加密,d表示解密,实际上3DES算法如下所示,e表示加密函数,d表示解秘函数,一共用到3对加解密密钥:

encrypt=e3(d2(e1(data)))

decrypt=d1(e2(d3(encrypt)))

将上述代码中的DESKeySpec改成DESedeKeySpec,把KEY_DES改成"DESede"即可运行DESede加密算法.

以上是关于对称加密算法:DES加密和DESede加密和AES和PBE的主要内容,如果未能解决你的问题,请参考以下文章

安全模块 - 对称加密算法

Java加密与解密之对称加密算法

java加密(对称)

1、对称加密算法

加密算法系列之:des加密aes加密3des加密对称加密非对称加密Hash 算法

安卓常见的一些加密((对称加密DES,AES),非对称加密(RSA),MD5)