问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

对称加密算法之DES与AES的使用

发布网友 发布时间:2024-09-25 17:32

我来回答

1个回答

热心网友 时间:2024-11-20 07:16

对称加密

加密和解密时使用相同的密钥,这种加密方法称为对称加密

分类

流加密:按顺序一个一个加密,如文本:123456,则先加密1再加密2,以此类推块加密:分块分组加密,如文本:123456,若分3组,则先加密12,再加密34,以此类推

常见加密算法

DESAES

特点

加密速度快, 可以加密大文件密文可逆, 一旦密钥文件泄漏, 就会导致数据暴露加密后再ASCII编码表找不到对应字符, 出现乱码一般结合Base64使用,防止乱码DES的使用

DES是数据加密标准,是一种使用密钥加密的块算法。

Java的Cipher类供加密和解密功能,在线文档:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html

public static void main(String[] args) throws Exception {// 原文String input = "Hello Word";// 使用des进行加密,密钥必须是8个字节String key = "12345678";// 获取Cipher对象的算法String transformation = "DES";// 指定获取密钥的算法String algorithm = "DES";String encrypt = encrypt(input, key, transformation, algorithm);System.out.println("加密:" + encrypt);String decrypt = dncrypt(encrypt, key, transformation, algorithm);System.out.println("解密:" + decrypt);}/** * 加密数据 */private static String encrypt(String input, String key, String transformation, String algorithm) throws Exception {// 获取加密对象Cipher cipher = Cipher.getInstance(transformation);// 指定秘钥规则:传入密钥的字节数组与指定的算法SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);// 初始化加密对象: 指定加密模式与秘钥规则cipher.init(Cipher.ENCRYPT_MODE, sks);// 开始加密byte[] bytes = cipher.doFinal(input.getBytes());// 打印密文,由于bytes字节数字中存在负数,即ascii码有负数,解析不出来,将输出乱码System.out.println("bytes = " + new String(bytes));// 对字节数字进行Base64编码return Base64.encode(bytes);}/** * 解密数据 */private static String dncrypt(String input, String key, String transformation, String algorithm) throws Exception {// 获取Cipher对象Cipher cipher = Cipher.getInstance(transformation);// 指定秘钥规则:传入密钥的字节数组与指定的算法SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);// 初始化解密对象: 指定解密模式与秘钥规则cipher.init(Cipher.DECRYPT_MODE, sks);// 解密byte[] bytes = cipher.doFinal(Base64.decode(input));return new String(bytes);}bytes = ?Rd???? h?? 加密:01Jk6AecyqnqsABousAVIA==解密:Hello WordAES的使用

AES是高级加密标准,用来替代DES。

public static void main(String[] args) throws Exception {// 原文String input = "Hello Word";// AES加密算法:密匙必须是16个字节String key = "1234567891234567";// 获取Cipher对象的算法String transformation = "AES";// 指定获取密钥的算法String algorithm = "AES"; String encrypt = encrypt(input, key, transformation, algorithm);System.out.println("加密:" + encrypt);String decrypt = dncrypt(encrypt, key, transformation, algorithm);System.out.println("解密:" + decrypt);}```javabytes = ??F?p??Ny?|08?k2加密:/fZGj3CTnE5503wwONlrMg==解密:Hello WordBase64算法

Base64算法不是加密算法,是用于传输8Bit字节码的可读性编码算法之一。

可读性编码不改变信息内容,只改变信息内容的表现形式

Base64是说在编码过程中使用了64种字符:大写A到Z、小写a到z、数字0到9、“+”和“/”

构成

26个小写字母: a - z 26个大写字母: A - Z10 个数字: 0 - 92个符号: + /

算法原理

base64是3个字节为一组,一个字节 8位,一共就是24位 ,然后把3个字节转成4组,每组6位(3 * 8 = 4 * 6 = 24)。

当每组6位时则缺少2位,在高位进行补0 ,于是控制了base64的取值范围在0-63位,所以就叫base64(00111 111 = 32 + 16 + 8 + 4 + 2 + 1 =63)

注意:

由于base64是三个字节一组 ,当一组三个字节位数不够的时候,会使用等号来补齐。

public static void main(String[] args) throws Exception {System.out.println(Base64.encode("1".getBytes()));System.out.println(Base64.encode("12".getBytes()));System.out.println(Base64.encode("123".getBytes()));// UTF-8编码下:一个汉字站3个字节System.out.println(Base64.encode("中国".getBytes("UTF-8")));// GBK编码下:一个汉字站2个字节System.out.println(Base64.encode("中国".getBytes("GBK")));}DESAES0加密模式

ECB :

电子密码本, 需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密

可以并行处理数据,但同样的原文生成同样的密文, 不能很好的保护数据

CBC

密码块链接. 每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块

同样的原文生成的密文不一样,但串行处理数据速度慢

填充模式

当需要按块处理的数据的数据长度不符合块处理需求时, 会按照一定的方法规则填充满块

NoPadding:不填充

DESAES1

PKCS5Padding:填充

DESAES2

注意:

默认情况下, 加密模式和填充模式为 : ECB/PKCS5Padding。如果使用CBC模式, 在初始化Cipher对象时, 需要添加初始化向量IV参数 : IvParameterSpec iv = new IvParameterSpec(key.getBytes());

测试加密模式与填充模式

Cipher的加密类型如下: 1.使用默认ECB加密模式与PKCS5Padding填充模式

DESAES3bytes = ?Rd???? h?? 加密:01Jk6AecyqnqsABousAVIA==解密:Hello Word

2.明确指定ECB加密模式和PKCS5Padding填充模式

DESAES5bytes = ?Rd???? h?? 加密:01Jk6AecyqnqsABousAVIA==解密:Hello Word

3.明确指定ECB加密模式和NoPadding填充模式

此时原文必须为8byte的整数倍,否则报错:Input length not multiple of 8 bytes

DESAES7 String encrypt = encrypt(input, key, transformation, algorithm);System.out.println("加密:" + encrypt);String decrypt = dncrypt(encrypt, key, transformation, algorithm);System.out.println("解密:" + decrypt);}DESAES9

4.明确指定CBC加密模式和PKCS5Padding填充模式

加密速度快, 可以加密大文件密文可逆, 一旦密钥文件泄漏, 就会导致数据暴露加密后再ASCII编码表找不到对应字符, 出现乱码一般结合Base64使用,防止乱码0加密速度快, 可以加密大文件密文可逆, 一旦密钥文件泄漏, 就会导致数据暴露加密后再ASCII编码表找不到对应字符, 出现乱码一般结合Base64使用,防止乱码1原文:https://juejin.cn/post/7102726486603333662
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
深圳公共营养师怎么申请补贴 深圳公共营养师补贴怎么领 深圳营养师工资待遇怎么样 ...出道16年一直不露额头,当他撩起刘海,效果堪比「 ”整容”_百度... ...刘海的鹿晗,重回颜值巅峰!换个发型堪比“整容”都有哪些?_百度... ...整容”叫尹正剪头,仅仅换个发型而已,为何会变化那么大呢?_百度... 会计考高级有什么要求 报考高级会计需要什么条件呢? 工程项目融资、建设、管理、运营等过程中各模式的英文简称及专业分析... 200平米别墅装修多少钱别墅装修需要注意些什么 电子琴梦中的婚礼小白 哪个网站可以发帖 新红楼梦插曲 我是学食品专业的想了解一下河南省的食品厂 180.100A尺度衣服尺码. 上饶火车站上饶银行商务候车室办什么银行卡能进?市民卡行吗 上饶银行市民卡能在上饶16路公交上刷卡使用吗?刷卡金额是多少? 印度尼西亚买什么好 伴手礼推荐 创维电视黑屏一秒恢复怎么解决 我家创维电视可以上网但是看不了直播是怎么回事? 经济师副高职称如何取得 经济师副高级职称 创维电视出现横条纹是怎么回事? 我家是创维智能电视上网,看不到影视 经济师副高职称评审条件要求是什么 创维电视出现故障怎么办 创维电视屏幕出现条纹,怎么解决? 什么是数据库的安全性和数据库完整性简述每个阶段的主要工作内容_百度... 浙江三位一体,只有六个A别的什么也没有,参加哪所好,希望好一点的是大学... Illustrator绘制3D立体效果的悬浮插画效果 Illustrator制作创意的3D像素字体 北京马拉松除了42.195公里的 还有什么别的项目么 比如10公里的 迷你马拉松多少公里 迷你马拉松多少公里?多少时间完成? 迷你马拉松的具体里程是多少? 10月14日北京马拉松多少公里? 红楼梦歌曲歌词 有人在南昌康师傅做过会计吗 关于顶新(康师傅)笔试的问题。 我用的是OPPO A105K手机,屏幕桌面每到节日时都会自动更换为该节日图片... oppo手机屏幕为何会自动乱跳? 红楼梦歌曲有哪些歌曲 半个停车位就够用,新宝骏E300养车成本是多少? 重庆轻轨4号线换乘指南 重庆轻轨4号线寸滩站的具体位置 ...经典的Q版街头霸王(口袋战士)个人物的出招表吗?两个神秘人物都想知道... 去连云港旅行遇到动车晚点,该怎么办? 一个人可以建立几个微信群 《密室大逃脱》公布角色海报,你最期待谁的表现? 高手看下蓝宝石 显卡,和驱动. 外地户口在成都交医保门诊报销吗? ...的事情,却总想着不同的结果,用爱因斯坦这句话写作文有什么立意...