【网络安全】对称加密算法

news2024/11/15 13:23:10

文章目录

    • 非对称加密
    • 对称加密:
    • Des 加密
    • 3 DES 加密
    • Des 加密java Api
    • AES 加密算法
    • AES 加密过程
    • AES 密钥拓展

非对称加密

非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

对称加密:

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

  • 示例
    我们现在有一个原文3要发送给B,设置密钥为108,3* 108 = 324,将324作为密文发送给B。B拿到密文324后,使用324/108= 3得到原文
  • 常见加密算法
    DES : Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。
    AES : Advanced Encryption Standard,高级加密标准.在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
  • 特点
    加密速度快,可以加密大文件
    密文可逆,一旦密钥文件泄漏,就会导致数据暴露。加密后编码表找不到对应字符,出现乱码
    一般结合Base64使用

Des 加密


b站视频教程链接
DES算法是属于对称密码算法中的分组加密算法。

  • 算法步骤
  • IP置换
    按照一定的规则,将原来的64位二进制位重新排序。
  • 轮函数——E扩展置换
    将32 位输⼊扩展为48位输出

    可以理解为 将每部分的第一个和最后一个数取出交换后放到,原来数的前(后)面
  • 轮函数–S盒压缩处理
    经过扩展的48位明文和48位密钥进行异或运算后,再使用8个S盒压缩处理得到32位数据。将48位输入等分为8块,每块6位输入压缩为4位输出。
  • 轮函数——P盒置换
    与ip置换相同,根据p盒置换表进行置换
    S盒置换再经过P盒置换。⾄此,⼀次轮函数操作完毕。
  • 密钥生成
    密钥为64位,除去8位校验位,剩余56位参与运算。
    按照交换规则,⽣成16个48位的轮密钥。

3 DES 加密

DES是一个经典的对称加密算法,但也缺陷明显,即56位的密钥安全性不足,已被证实可以在短时间内破解。为解决此问题,出现了3DES,也称Triple DES,3DES为DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密。为了兼容普通的DES,3DES并没有直接使用 加密->加密->加密 的方式,而是采用了加密->解密->加密 的方式。

Des 加密java Api

加密过程

 @Test
    public void testEnDes() throws Exception{
        //原文
        String input="加密测试";
        //定义密钥
        String key="12345678";
        //加密方式
        String Des="DES";
        //创建加密对象
        Cipher cipher = Cipher.getInstance(Des);
        //创建加密规则
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), Des);
        //加密初始化
        cipher.init(Cipher.ENCRYPT_MODE,secretKeySpec);
        byte[] bytes = cipher.doFinal(input.getBytes(StandardCharsets.UTF_8));
        String encode = Base64.encode(bytes);
        log.info("解密前的内容为:{}",input);
        log.info("加密后的内容为:{}",encode);
    }


解密过程

@Test
    public void testDeDes() throws Exception{
        //原文
        String input="fvlQhBYI8Ev8KJFCWAHY9A==";
        //定义密钥
        String key="12345678";
        //加密方式
        String Des="DES";
        //创建加密对象
        Cipher cipher = Cipher.getInstance(Des);
        //创建加密规则
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), Des);
        //加密初始化
        cipher.init(Cipher.DECRYPT_MODE,secretKeySpec);
        byte[] bytes = cipher.doFinal(Base64.decode(input));
        log.info("解密前的内容为:{}",input);
        log.info("解密后的内容为:{}",new String(bytes));
        //制定加密算法
        //String password=
    }

AES 加密算法

AES 属于 分组加密 算法
明⽂⻓度固定为128位
密钥⻓度可以是128、192、256位

  • 输入字节的顺序

AES 加密过程

b站教程

  • 初始变换(Initial round)
  • 字节代换(SubBytes)
  • ⾏移位(ShiftRows)
    第几行向左移动几位(第0行移动0位,第1行1位……)
  • 列混合(MixColumn)
    左乘一个给定的4*4 矩阵
  • 轮密钥加(AddRoundKey)

AES 密钥拓展

  • 如果i不是4的倍数,那么第i列由如下等式确定:W[i]=W[i-4]⨁W[i-1] w[i] 为4*4 矩阵的第i列

  • 如果i是4的倍数,那么第i列由如下等式确定:W[i]=W[i-4]⨁T(W[i-1])
    函数T由3部分组成:字循环、字节代换和轮常量异或。

    • 字循环 将1个字中的4个字节循环左移1个字节。即将输⼊字[b0, b1, b2, b3]变换成
      [b1,b2,b3,b0]。
    • 字节代换 对字循环的结果使⽤S盒进⾏字节代换。
    • 轮常量异或 将前两步的结果同轮常量Rcon[j]进⾏异或,其中j表示轮数。(同轮常量给定)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1907786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一键配置PCL环境+VTK环境(最简单的方法)

系列文章目录 1. Windows系统下5分钟配置好PCL(debug和release) 2. PCL1.11.0Qt5.14.2VTK8.2VS2019 环境配置(超详细) 文章目录 系列文章目录前言一、下载解压文件二、双击运行Setup.bat三、测试视频四、所需文件 前言 之前写过…

Android 开发中 C++ 和Java 日志调试

在 C 中添加堆栈日志 先在 Android.bp 中 添加 ‘libutilscallstack’ shared_libs:["liblog"," libutilscallstack"]在想要打印堆栈的代码中添加 #include <utils/CallStack.h> using android::CallStack;// 在函数中添加 int VisualizerLib_Crea…

20240708 每日AI必读资讯

&#x1f916;破解ChatGPT惊人耗电&#xff01;DeepMind新算法训练提效13倍&#xff0c;能耗暴降10倍 - 谷歌DeepMind研究团队提出了一种加快AI训练的新方法——多模态对比学习与联合示例选择&#xff08;JEST&#xff09;&#xff0c;大大减少了所需的计算资源和时间。 - JE…

python基础篇(9):模块

1 模块简介 Python 模块(Module)&#xff0c;是一个 Python 文件&#xff0c;以 .py 结尾. 模块能定义函数&#xff0c;类和变量&#xff0c;模块里也能包含可执行的代码. 模块的作用: python中有很多各种不同的模块, 每一个模块都可以帮助我们快速的实现一些功能, 比如实现…

实在智能荣获WAIC 2024机器之心重量级奖项——AI隐形冠军TOP 10!

近日&#xff0c;世界人工智能大会&#xff08;WAIC 2024&#xff09;如火如荼召开&#xff0c;自2018年首届举办以来&#xff0c;WAIC已成为全球AI领域最具影响力的国际盛会之一。本届WAIC再度集聚了来自世界各地的政府代表、顶尖科学家、行业领袖和创新企业等&#xff0c;共同…

Redis存储原理与数据模型

Redis存储结构 存储转换 redis-value编码 string int&#xff1a;字符串长度小于等于20切能转成整数raw&#xff1a;字符串长度大于44embstr&#xff1a;字符串长度小于等于44 list quicklist&#xff08;双向链表&#xff09;ziplist&#xff08;压缩链表&#xff09; hash …

7.8作业

一、思维导图 二、 1】按值修改 2】按值查找&#xff0c;返回当前节点的地址 &#xff08;先不考虑重复&#xff0c;如果有重复&#xff0c;返回第一个&#xff09; 3】反转 4】销毁链表 //按值修改 int value_change(linklistptr H,datatype e,int value) {if(HNULL||empty(H…

自动化测试及生成测试报告

Linux安装Selenium进行自动化测试 首先需要安装python、Chrome&ChromeDirver ChromeDriver与Chrome对应版本 #查看chrome版本google-chrome --version或者在浏览器搜索chrome://version/ChromeDriver下载地址这里下载114版本 wget https://chromedriver.storage.googleap…

数据库图形化管理界面应用 Navicat Premium 使用教程

经同学介绍的一个把数据库可视化的软件Navicat Premium&#xff0c;很好用&#xff0c;在这里分享一下&#xff0c;需要的同学可以去了解看看 一&#xff1a;下载并解压 链接&#xff1a;https://pan.baidu.com/s/1ZcDH6m7EAurAp_QmXWx81A 提取码&#xff1a;e5f6 解压到合…

Windows下载、配置Java JDK开发环境的方法

本文介绍在Windows电脑中&#xff0c;安装JDK&#xff08;Java Development Kit&#xff09;&#xff0c;也就是Java开发工具包的详细方法。 JDK是Java软件开发的基础&#xff0c;由Oracle公司提供&#xff0c;用于构建在Java平台上运行的应用程序与组件等&#xff1b;其已经包…

CnosDB:深入理解时序数据修复函数

CnosDB是一个专注于时序数据处理的数据库。CnosDB针对时序数据的特点设计并实现了三个强大的数据修复函数&#xff1a; timestamp_repair – 对时间戳列进行有效修复&#xff0c;支持插入、删除、不变等操作。value_repair – 对值列进行智能修复&#xff0c;根据时间戳间隔和…

Django 新增数据 save()方法

1&#xff0c;添加模型 Test/app11/models.py from django.db import modelsclass Book(models.Model):title models.CharField(max_length100)author models.CharField(max_length100)publication_date models.DateField()price models.DecimalField(max_digits5, decim…

数据分析与挖掘实战案例-电商产品评论数据情感分析

数据分析与挖掘实战案例-电商产品评论数据情感分析 文章目录 数据分析与挖掘实战案例-电商产品评论数据情感分析1. 背景与挖掘目标2. 分析方法与过程2.1 评论预处理1. 评论去重2. 数据清洗 2.2 评论分词1. 分词、词性标注、去除停用词2. 提取含名词的评论3. 绘制词云查看分词效…

OS-HACKNOS-2.1

确定靶机IP地址 扫描靶机开放端口信息 目录扫描 访问后发现个邮箱地址 尝试爆破二级目录 确定为wordpress站 利用wpscan进行漏洞扫描 #扫描所有插件 wpscan --url http://192.168.0.2/tsweb -e ap 发现存在漏洞插件 cat /usr/share/exploitdb/exploits/php/webapps/46537.txt…

用例导图CMind

突然有一些觉悟&#xff0c;程序猿不能只会吭哧吭哧的低头做事&#xff0c;应该学会怎么去展示自己&#xff0c;怎么去宣传自己&#xff0c;怎么把自己想做的事表述清楚。 于是&#xff0c;这两天一直在整理自己的作品&#xff0c;也为接下来的找工作多做点准备。接下来…

Tomcat的负载均衡、动静分离

一、如何tomcat和nginx负载均衡及动静分离&#xff1a;2台tomcat&#xff0c;3台nginx来实现 1.首先设置tomcat1和tomcat2服务器 关闭两台tomcat的防火墙及安全机制&#xff1a;systemctl stop filwalld setenforce 0 进入tomcat目录的webapps中&#xff0c;创建test 2.配…

Sprint Boot 2 核心功能(一)

核心功能 1、配置文件 application.properties 同基础入门篇的application.properties用法一样 Spring Boot 2 入门基础 application.yaml&#xff08;或application.yml&#xff09; 基本语法 key: value&#xff1b;kv之间有空格大小写敏感使用缩进表示层级关系缩进不允…

数学系C++ 继承派生多态 (十四十三)

— 继承 可以使得派生类具有父类的各种属性和功能&#xff0c;而不需要再次编写相同的代码。 类的继承&#xff1a;派生类继承了父类的特性&#xff08;数据和函数&#xff09; ► 继承是可传递的&#xff1a;从父类继承的特性可以传递给新的子类 ► 继承方式&#xff1a;规…

Unity Text Mesh Pro 中英文混编自动换行问题

问题描述 使用TextMeshPro 输入中英文时&#xff0c;在一行内 输入中英文&#xff0c;当英文部分超过第一行剩余位置时&#xff0c;整个英文部分都会自动换行 问题截图&#xff1a; 期待截图&#xff1a; 问题说明 因为 TextMeshPro识别中文后会带换行符。 解决方案 修改…

YOLOv5改进 | 注意力机制 | 结合静态和动态上下文信息的注意力机制【全网独家】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a; 《YOLOv5入门 改…