Swift开发常用开发工具🛠

blowfish加密算法

2017-11-27  本文已影响0人  夜月行者

简介

自从32位处理器诞生后,blowfish加密算法在加密速度上就超越了DES加密算法,引起了人们的关注。blowfish加密算法没有注册专利,不需要授权,可以免费使用。但是知名度不如AES

过程

blowfish加密算法是一种对称的分组加密算法,每次加密一个64位分组,使用32位~448位的可变长度密钥,应用于内部加密。加密过程分为两个阶段:密钥预处理和信息加密。
加密函数blowfish—encrypt()输入64位明文,输出64位密文。

java demo

这里采用的是使用加密时自动生成iv的方式,这样,解密的时候一定要把iv传递过去才行。

 
    public static byte[] BOFISH() {
 
        String data = "123";
        String key = "123123123";//密钥长度必须大于8个字节
        try {
 
            SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "Blowfish");
            Cipher cipher = Cipher.getInstance("Blowfish/CFB/NoPadding");
            // 用密匙初始化Cipher对象
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            System.out.println("iv is : " + new String(cipher.getIV()));
 
            // 执行加密操作
            byte encryptedData[] = cipher.doFinal(data.getBytes());
 
            System.out.println(str16(encryptedData));
            bofishDecrypt(key, cipher.getIV(), str16(encryptedData));
 
            return encryptedData;
        } catch (Exception e) {
            System.err.println("出错!");
            e.printStackTrace();
        }
 
        return null;
    }
 
 
    public static void bofishDecrypt(String key, byte[] iv, String secretContent) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "Blowfish");
        Cipher cipher = Cipher.getInstance("Blowfish/CFB/NoPadding");
 
        IvParameterSpec param = new IvParameterSpec(iv);
        cipher.init(Cipher.DECRYPT_MODE, secretKey, param);
        System.out.println("iv is : " + new String(cipher.getIV()));
 
        // 执行加密操作
        byte encryptedData[] = cipher.doFinal(str16to2(secretContent));
        System.out.println(new String(encryptedData));
 
    }


上一篇下一篇

猜你喜欢

热点阅读