对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yao)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密时用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。
二.对称加密概念:对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信的安全性至关重要。
三.特点:对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。 不足之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量呈几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。而与公开密钥加密算法比起来,对称加密算法能够提供加密和认证却缺乏了签名功能,使得使用范围有所缩小。在计算机专网系统中广泛使用的对称加密算法有DES和IDEA等。美国国家标准局倡导的AES作为新标准取代了DES。
四.具体算法:AES算法,DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法。
五.原理应用:对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦。对称加密算法的安全性取决于加密密钥的保存情况,但要求企业中每一个持有密钥的人都保守秘密是不可能的,他们通常会有意无意的把密钥泄漏出去——如果一个用户使用的密钥被入侵者所获得,入侵者便可以读取该用户密钥加密的所有文档,如果整个企业共用一个加密密钥,那整个企业文档的保密性便无从谈起。
六.常用算法: 1⃣️.AES算法:高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已成为对称密钥加密中最流行的算法之一。
2⃣️.DES算法:DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来.DES算法参数:DES算法的入口参数有三个:Key、Data、Mode。其中Key为7个字节共56位,是DES算法的工作密钥;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
3⃣️.3DES算法:3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
①.AES加解密代码:
//AES密码要16个字节.
private static final String AES_FLAG="AES/ECB/PKCS5Padding";
public static byte[] aesEncrpt(int mode, String password, byte[] content) {
byte[] buff = null;
try{
if (password == null || content == null ||password.length() != 16) {
return null;
}
//1.创建加解密引擎对象
Cipher cipher = Cipher.getInstance(AES_FLAG);
//2.生成aes加解密算法对象
SecretKeySpec secretKeySpec = new
SecretKeySpec(password.getBytes(), "AES");
//3.初始化加解密引擎
cipher.init(mode, secretKeySpec);
//4.生成最终的密文
buff = cipher.doFinal(content);
} catch (InvalidKeyException | NoSuchAlgorithmException |
IllegalBlockSizeException | NoSuchPaddingException |
BadPaddingException e) {
e.printStackTrace();
}
return buff;
}
②.DES及3DES加解密代码:
//DES密码是8个字节--->64位
// private static final String DES_FLAG="DES";//des加密的flag
//DESede:密码要24个字节---->192位
private static final String DES_FLAG = "DESede";//3des
public static byte[] desEncrpt(int mode, String password, byte[] content) {
byte[] buff = null;
try{
//1.创建生成加解密处理的引擎对象
Cipher cipher = Cipher.getInstance(DES_FLAG);
//2.生成对称加密的密码对象
//2.1 创建生成密码的工厂对象
SecretKeyFactory factory = SecretKeyFactory.getInstance(DES_FLAG);
//2.2 创建生成des加密对象
// DESKeySpec dks=new DESKeySpec(password.getBytes());
DESedeKeySpec dks = new DESedeKeySpec(password.getBytes());
//2.3 生成最终的秘钥
SecretKey key = factory.generateSecret(dks);
//3.通过最终的key初始化引擎对象
cipher.init(mode, key, new SecureRandom());
//4.进行最终的加密操作形成密文
buff = cipher.doFinal(content);
}catch (InvalidKeyException e) {//密码无法生成
e.printStackTrace();
}catch (NoSuchAlgorithmException e) {//指定的算法异常 不存在
e.printStackTrace();
}catch (NoSuchPaddingException e) {//数据没有填充密码的长度时
e.printStackTrace();
}catch (InvalidKeySpecException e) {//密码不符合规范
e.printStackTrace();
}catch (IllegalBlockSizeException e) {//明文的尺寸问题
e.printStackTrace();
}catch (BadPaddingException e) {//数据填充异常
e.printStackTrace();
}
return buff;
}