Java实现 DES算法ECB模式NoPadding填充

问题由来:

今天客户需要我向机器端发送命令,然后需要加密一个字段,用的就是DES算法ECB模式NoPadding填充。因为之前没有接触过,所以在网上找了很多,最后调试,优化了一个。

解决方案:

实现类:

public static byte[] getKeyByByteBuf(ByteBuf byteBuf) {
        byte[] byteTemp = new byte[8];
        // 将用户指定的规则转换成八位数组
        int i=0;
        for(;i8;i++){
            byteTemp[i]=byteBuf.getByte(i);
        }
        for(;i<8;i++){
            byteTemp[i]=0x00;
        }
        return byteTemp;
    }
    public static byte[] encryptDESByByteBuf(ByteBuf encryptbyte, byte[] encryptKey) throws Exception {
        SecretKeySpec key = new SecretKeySpec(getKey(encryptKey), "DES");
        Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encryptedData = cipher.doFinal(getKeyByByteBuf(encryptbyte));
        return encryptedData;
    }
    public static byte[] getKey(byte[] keyRule) {
        Key key = null;
        byte[] keyByte = keyRule;
        System.out.println(keyByte.length);
        // 创建一个空的八位数组,默认情况下为0
        byte[] byteTemp = new byte[8];
        // 将用户指定的规则转换成八位数组
        int i=0;
        for (; i < byteTemp.length && i < keyByte.length; i++) {
            byteTemp[i] = keyByte[i];
        }
        key = new SecretKeySpec(byteTemp, "DES");
        return key.getEncoded();
    }

测试类:

    @Test
    public void testDES() throws Exception {
       ByteBuf byteBuf=Unpooled.buffer();//这个是要加密的内容
        byteBuf.writeByte(1);
        byteBuf.writeByte(2);
        byteBuf.writeByte(3);
        byteBuf.writeByte(4);

        //DES加密(ECB模式)
        byte[] s = DESencrypt.encryptDESByByteBuf(byteBuf,HexStringUtil.hexStringToBytes("XXXXXXXXXXXXXXXX"));//这个是密钥
        System.out.println("加密结果:"+HexStringUtil.bytesToHexString(s));
    }

因为我是在Netty框架下处理流信息,所以把它改成了使用ByteBuf的方式,这个可以改回来,最后用byte[]就ok。
如:

    public static byte[] encryptDESByByteArray(byte[] encryptbyte, byte[] encryptKey) throws Exception {
        SecretKeySpec key = new SecretKeySpec(getKey(encryptKey), "DES");
        Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encryptedData = cipher.doFinal(encryptbyte);
        return encryptedData;
    }

你可能感兴趣的:(Netty)