关于密码学:密码学-07-DES

39次阅读

共计 1322 个字符,预计需要花费 4 分钟才能阅读完成。

1. 简介

算法 秘钥长度 秘钥长度默认值 工作模式 填充形式 备注
DES 56 56 ECB,CBC,PCBC,CTR,CTS,CFB,CFB8 至 CFB128,OFB,OFB8 至 OFB128 NoPadding,PKCS5Padding,ISO101126Padding java6 实现
DES 56 56 ECB,CBC,PCBC,CTR,CTS,CFB,CFB8 至 CFB128,OFB,OFB8 至 OFB128 NoPadding,PKCS5Padding,ISO101126Padding java6 实现

2. java 实现

public static String encryptDES(String plaintext) throws Exception {
        //        初始化秘钥 和加密算法   秘钥必须大于 8 位
        SecretKeySpec keySpec = new SecretKeySpec("12345678".getBytes(StandardCharsets.UTF_8),"DES");
        //         失去 Cipher 的实例
        Cipher des = Cipher.getInstance("DES/ECB/PKCS5Padding");
        // 对 Cipher 实例进行初始化,des.init(Cipher.ENCRYPT_MODE,keySpec);
        // update 并不会每次都减少要加密的字符串的长度,并不牢靠。现实中的状态是  xiaojianbang +hengdi 解密发现只有 banghengdi
        des.update("xiaojianbang".getBytes(StandardCharsets.UTF_8));
        // 加密 由字符串 失去的 byte[]
        byte[] res=des.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
        // 将 byte[] 实例化为 ByteString 对象
        ByteString bty=  ByteString.of(res);
        // hex 编码
        String str_hex= bty.hex();
        // base64 编码
        String str_base64 = bty.base64();
        return str_hex + "||" + str_base64;
     }

解密:

public static String decryptDES(String cipherText) throws Exception {// 将加密后 base64 编码的字符串 解码,并还原成 byte[]
        byte[] cipherTextBytes = ByteString.decodeBase64(cipherText).toByteArray();
        SecretKeySpec keySpec = new SecretKeySpec("12345678".getBytes(StandardCharsets.UTF_8),"DES");
        Cipher des = Cipher.getInstance("DES/ECB/PKCS5Padding");
        des.init(Cipher.DECRYPT_MODE,keySpec);
        byte[] res=des.doFinal(cipherTextBytes);
        return new String(res);
    }

正文完
 0