廖雪峰Java10加密与安全-4加密算法-1对称加密算法

对称加密算法

加密和解密使用同一个密钥,例如WinRAR。
WinRAR在对文件进行打包的时候,可以设置一个密码,在解压的时候需要使用同样的密码才能正确的解压。
加密:encrypt(key,message) -> s
解密:decrypt(key,s) -> message

算法 密钥长度 工作模式(参数) 填充模式(格式的选择)
DES 56/64 ECB, CBC, PCBC, CTR... NoPadding, PKCS5Padding
AES 128/192/256 ECB,CBC,PCBC,CTR... NoPadding,PKCS5Padding, PKCS7Padding
IDEA 128 ECB PKCS5Padding, PKCS7Padding
package com.testList;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
import java.util.Base64;

public class SplitString {
    //指定工作模式
   static final String CIPHER_NAME = "AES/ECB/PKCS5Padding";
   //加密
   public static byte[] encrypt(byte[] key,byte[] input) throws GeneralSecurityException {
       //传入加密算法的名字,获得Cipher实例
       Cipher cipher = Cipher.getInstance(CIPHER_NAME);
       //传入key的byte数组,转化为AES的key
       SecretKeySpec keySpec = new SecretKeySpec(key,"AES");
       //初始化为加密模式,传入key
       cipher.init(cipher.ENCRYPT_MODE,keySpec);
       //传入加密的内容,获取加密后的数组
       return cipher.doFinal(input);
   }
   //解密,传入key,加密的输入
   public static byte[] decrypt(byte[] key,byte[] input) throws GeneralSecurityException{
       //获得一个cipher实例
       Cipher cipher = Cipher.getInstance(CIPHER_NAME);
       //
       SecretKeySpec keySpec = new SecretKeySpec(key,"AES");
       cipher.init(cipher.DECRYPT_MODE,keySpec);
       return cipher.doFinal(input);
   }
   public static void main(String[] args) throws Exception{
       //原文
       String message = "Hello world!encrypted using AES!";
       System.out.println("原文:"+message);
       //128位密钥=16bytes key
       byte[] key = "1234567890abcdef".getBytes("UTF-8");
       byte[] data = message.getBytes(StandardCharsets.UTF_8);
       //加密
       byte[] encrypted = encrypt(key,data);
       System.out.println("Encryped data:"+Base64.getEncoder().encodeToString(encrypted));
       //解密
       byte[] decrypted = decrypt(key,encrypted);
       System.out.println("Decrypt data:"+new String(decrypted,"UTF-8"));
   }
}

原文地址:https://www.cnblogs.com/csj2018/p/10847053.html

时间: 2024-08-30 17:29:48

廖雪峰Java10加密与安全-4加密算法-1对称加密算法的相关文章

廖雪峰Java10加密与安全-2加密算法-1URL编码

1.URL编码 URL编码是浏览器发送数据给服务器时使用的编码. 如通过百度搜索美女: 编码前:https://www.baidu.com/s?wd=美女 编码后:https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3 URL编码规则: A-Z, a-z, 0-9以及-_.*保持不变 其他字符以%XX表示 * < -> %3C * (UTF-8: 0xe4b8ad) -> %E4%B8%AD * 空格有2种,一种是+(以前),另一种是%20(现在),目

廖雪峰Java10加密与安全-3摘要算法-1MD5

摘要算法 摘要算法(哈希算法/Hash/数字指纹): 计算任意长度数据的摘要(固定长度) 相同的输入数据始终得到相同的输出 不同的输入尽量得到不同的输出 摘要算法目的: 验证原始数据是否被篡改 输入:任意长度数据(byte[]) 输出:固定长度数据(byte[n]) hash("hello") = 0x5e918d2 hash("hello,java") = 0x7a9d88e8 hash("hello,bob") = 0xa0dbae2f ja

最全加密算法之对称加密和非对称加密

常见加密算法 : DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合: 3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高: RC2和 RC4:用变长密钥对大量数据进行加密,比 DES 快: IDEA(International Data Encryption Algorithm)国际数据加密算法:使用 128 位密钥提供非常强的安全性: RSA:由 RSA 公司发明,是一个支持变长密钥的公共

加密算法:对称加密和非对称加密

对称加密算法 所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密.密钥是控制加密及解密过程的指令.算法是一组规则,规定如何进行加密和解密. 对称加密算法的优点是算法公开.计算量小.加密速度快.加密效率高. 对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥.其次如果一方的秘钥被泄露,那么加密信息也就不安全了.另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收.发双方所拥有的钥匙数量巨大,密钥管理成为双方的负

对称加密算法

对称加密算法 提示:加密内容属于高级程序员的话题!有些内容会很枯燥!注意掌握加密的思路和操作步骤即可!代码不要求会写,只要会用就行! 又称传统加密算法 加密和解密使用同一个密钥 对称加密算法示例 密钥:X 加密算法:每个字符+X 明文:Hello 密钥为 1 时加密结果:Ifmmp 密钥为 2 时加密结果:Jgnnq 优缺点 优点 算法公开.计算量小.加密速度快.加密效率高 缺点 双方使用相同钥匙,安全性得不到保证 注意事项 密钥的保密工作非常重要 密钥要求定期更换 经典算法 算法 说明 DES

对称加密算法-DES以及DESede算法

一.简述 对称加密算法就是能将数据加解密.加密的时候用密钥对数据进行加密,解密的时候使用同样的密钥对数据进行解密. DES是美国国家标准研究所提出的算法.因为加解密的数据安全性和密钥长度成正比.des的56位的密钥已经形成安全隐患,在1998年之后就很少被采用.但是一些老旧的系统还在使用.因为这个des算法并没有被美国标准委员会公布全部算法,大家一致怀疑被留了后门.所以慢慢就被淘汰掉了. 后来针对des算法进行了改进,有了三重des算法(DESede).针对des算法的密钥长度较短以及迭代次数偏

对对称加密算法、非对称加密算法、数字签名的一些理解的简述

不太严谨的概括性描述 对称加密算法加密解密都是同一个密钥,所以需要让接受密文方事先知道密钥,而事先知道的方式一般通过网络或者预先存储在物理机器上,网络通信容易被获取,所以不安全. 非对称加密算法会生成公钥和私钥,如果用私密对一个明文进行加密,目的是为了证明给"拿了它的公钥对密文解密的人"知道,这段信息是发布这个公钥的人发的:而如果用公钥对一个明文进行加密,目的是为了证明给"这个公钥对应的私钥的所有者"知道,这段信息是要发给他的. 以上两种方法都无法无视直接地从物理上

常用加密算法之非对称加密算法

非对称加密算法 非对称加密算法是一种密钥的保密方法.非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey).公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密:如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密.因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法. 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开:得到该公用密钥的乙方使用该密钥对

廖雪峰Git教程学习笔记

廖雪峰git简单教程学习笔记 教程地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b0001.可以这样设计目录,在d:\reposisoty\ 在这个目录下面有很多的仓库.mkdir learngitcd learngit>>git init          #这样就把learngit 初始化成了一个仓库>>git status        #说明当前仓库的状态并