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));
}