对称加密
对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发送方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,生成复杂的加密密文进行发送,数据接收方收到密文后,若想读取原文,则需要使用加密使用的密钥及相同算法的逆算法对加密的密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发送和接收双方都使用这个密钥对数据进行加密和解密,这就要求加密方和解密方事先都必须知道加密的密钥。
对称加密算法的特点是
算法公开、计算量小、加密速度快、加密效率高。优势在于加解密的高速度和使用常密钥时的难破解性,但是,对加密算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对加密的密文进行解密,因此密钥的保护对于加密信息是否安全至关重要。
常用的对称加密算法包括DES算法、3DES算法、AES算法等。
1、DES算法
DES算法属于对称加密算法,明文按64位进行分组,密钥长64位,但事实上只有56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1),分组后的明文和56位的密钥按位替代或交换的方法形成密文。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解,因此演变出了3DES算法。3DES是DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行3次加密,是DES的一个更安全的变形。
Java的DES算法的基本使用
/**
* des加密
*/
public
static
String encode(String key,
byte
[] data)
throws
Exception{
try
{
DESKeySpec dks =
new
DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(
"DES"
);
//key的长度不能够小于8位字节
Key secretKey = keyFactory.generateSecret(dks);
Cipher cipher = Cipher. getInstance(
"DES"
);
IvParameterSpec iv =
new
IvParameterSpec(key.getBytes());
cipher.init(Cipher.
ENCRYPT_MODE
, secretKey,iv);
byte
[] bytes = cipher.doFinal(data);
return
Base64.encodeToString(bytes, Base64.
DEFAULT
);
}
catch
(Exception e) {
throw
new
Exception(e);
}
}
/**
* des解密
*/
public
static
String decode(String key,String data)
throws
Exception {
try
{
byte
b[] = Base64.decode(data, Base64.
DEFAULT
);
//必须先用base64解密 否则数据丢失
DESKeySpec dks =
new
DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(
"DES"
);
//key的长度不能够小于8位字节
Key secretKey = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance(
"DES/CBC/NoPadding"
);
IvParameterSpec iv =
new
IvParameterSpec(key.getBytes());
// AlgorithmParameterSpec paramSpec = iv;
cipher.init(Cipher.
DECRYPT_MODE
, secretKey,iv);
return
new
String(cipher.doFinal(b));
}
catch
(Exception e){
throw
new
Exception(e);
}
}
2、AES算法
AES是美国联邦政府采用的一种对称加密标准,已经广为全世界所使用,已成为对称加密算法中最流行的算法之一。AES算法作为新一代的数据加密标准,
汇聚了强安全性、高性能、高效率、易用和灵活等优点,设计有三个密钥长度(128、192、256位),比DES算法的加密强度更高,更为安全。
Java的AES算法的基本使用
与DES算法的操作类似,不同的是AES算法支持128、192、256三种密钥的长度,加密强度更高,但是,由于美国对于加密软件出口的控制,如果使用192位和256位的密钥,则需要另外下载无政策和司法限制的文件,否则程序运行时会出现异常。