网络安全与加密

1.Base64简单说明描述:Base64可以成为密码学的基石,非常重要。特点:可以将任意的二进制数据进行Base64编码结果:所有的数据都能被编码为并只用65个字符就能表示的文本文件。65字符:A~Z a~z 0~9 + / =对文件进行base64编码后文件数据的变化:编码后的数据~=编码前数据的4/3,会大1/3左右。2.命令行进行Base64编码和解码编码:base64 123.png -o 123.txt解码:base64 123.txt -o test.png -D2.Base64编码原理1)将所有字符转化为ASCII码;2)将ASCII码转化为8位二进制;3)将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位;4)统一在6位二进制前补两个0凑足8位;5)将补0后的二进制转为十进制;6)从Base64编码表获取十进制对应的Base64编码;处理过程说明:a.转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。b.数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择查表选择对应的字符作为编码后的输出。c.不断进行,直到全部输入数据转换完成。d.如果最后剩下两个输入数据,在编码结果后加1个“=”;e.如果最后剩下一个输入数据,编码结果后加2个“=”;f.如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。3.实现a.说明:1)从iOS7.0 开始,苹果就提供了base64的编码和解码支持2)如果是老项目,则还能看到base64编码和解码的第三方框架,如果当前不再支持iOS7.0以下版本,则建议替换。b.相关代码://给定一个字符串,对该字符串进行Base64编码,然后返回编码后的结果-(NSString *)base64EncodeString:(NSString *)string{//1.先把字符串转换为二进制数据NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];//2.对二进制数据进行base64编码,返回编码后的字符串return [data base64EncodedStringWithOptions:0];}//对base64编码后的字符串进行解码-(NSString *)base64DecodeString:(NSString *)string{//1.将base64编码后的字符串『解码』为二进制数据NSData *data = [[NSData alloc]initWithBase64EncodedString:string options:0];//2.把二进制数据转换为字符串返回return [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];}c.终端测试命令$ echo -n A | base64$ echo -n QQ== |base64 -D

3.常见的加密算法和其它


1. base64 编码格式
2. 密码学演化 "秘密本"-->RSA
3. 常见的加密算法1)消息摘要(单向散列函数)2)对称加密3)非对称加密4)证书等

4.单向散列函数


1.单向散列函数的特点:①加密后密文的长度是定长的②如果明文不一样,那么散列后的结果一定不一样③如果明文一样,那么加密后的密文一定一样(对相同数据加密,加密后的密文一样)④所有的加密算法是公开的⑤不可以逆推反算
2.经典加密算法1)MD5加密2)SHA13)SHA512
3.MD5加密算法简单说明1)对字符串进行MD5加密可以得到一个32个字符的密文2)加密之后不能根据密文逆推出明文3)MD5已经被破解(暴力破解|碰撞检测)
4.MD5加密进阶1)先加盐,然后再进行MD52)先乱序,再进行MD5加密3)乱序|加盐,多次MD5加密等4)使用消息认证机制,即HMAC-MD5-先对密钥进行加密,加密之后进行两次MD5散列5)加密命令行MD5加密-字符串    $ echo -n "super" |md5MD5加密-文件1     $ md5 abc.pngSHA1加密:        $ echo -n "super" |openssl sha -sha1SHA256            $ echo -n "super" |openssl sha -sha256SHA512            $ echo -n "super" |openssl sha -sha512hmacMD5加密       $ echo -n "super" |openssl dgst -md5 -hmac "123"5.散列函数应用领域1)搜索 多个关键字,先对每个关键字进行散列,然后多个关键字进行或运算,如果值一致则搜索结果一致2)版权 对文件进行散列判断该文件是否是正版或原版的3)文件完整性验证 对整个文件进行散列,比较散列值判断文件是否完整或被篡改
6.消息认证机制(HMAC)简单说明1)原理①消息的发送者和接收者有一个共享密钥②发送者使用共享密钥对消息加密计算得到MAC值(消息认证码)③消息接收者使用共享密钥对消息加密计算得到MAC值④比较两个MAC值是否一致2)使用①客户端需要在发送的时候把(消息)+(消息·HMAC)一起发送给服务器②服务器接收到数据后,对拿到的消息用共享的KEY进行HMAC,比较是否一致,如果一致则信任

5.对称加密


1.对称加密的特点1)加密/解密使用相同的密钥2)加密和解密的过程是可逆的(明文-》明文-》明文)


2.经典算法1)DES 数据加密标准2)3DES 使用3个密钥,对消息进行(密钥1·加密)+(密钥2·解密)+(密钥3·加密)3)AES 高级加密标准
3.分组密码简单说明密码算法可以分为分组密码和流密码两种。分组密码:每次只能处理特定长度的一zu数据的一类密码算法。一个分组的比特数量就称之为分组长度。ex:DES和3DES的分组长度都是64比特。即每次只能加密64比特的明文,并生成64比特的密文。AES的分组长度有128比特、192比特和256比特可以选择。流密码:对数据流进行连续处理的一类算法。流密码中一般以1比特、8比特或者是32比特等作为单位俩进行加密和解密。
4.ECB分组模式ECB模式的全称为Electronic CodeBook模式。又成为电子密码本模式。特点:1)使用ECB模式加密的时候,相同的明文分组会被转换为相同的密文分组。2)类似于一个巨大的明文分组-》密文分组的对照表。

    终端测试命令:加密 $ openssl enc -des-ecb -K 616263 -nosalt -in 123.txt -out 123.bin解密 $ openssl enc -des-ecb -K 616263 -nosalt -in 123.bin -out 1231.txt -d
5.CBC分组模式CBC模式全称为Cipher Block Chainning模式(密文分组链接模式|电子密码链条)特点:在CBC模式中,首先将明文分组与前一个密文分组进行XOR运算,然后再进行加密。

    终端命令:加密 $ openssl enc -des-cbc -K 616263 -iv 0102030405060708 -nosalt -in a.txt -out a.bin解密 $ openssl enc -des-cbc -K 616263 -iv 0102030405060708 -nosalt -in a.bin -out a1.txt -d

6.非对称加密


1.非对称加密的特点1)使用公钥加密,使用私钥解密2)公钥是公开的,私钥保密3)加密处理安全,但是性能极差

2.经典算法---RSA1)RSA 原理(1)求N,准备两个质数p和q,N = p x q(2)求L,L是p-1和q-1的最小公倍数。L = lcm(p-1,q-1)(3)求E,E和L的最大公约数为1(E和L互质)(4)求D,E x D mode L = 12)RSA加密小实践(1)p = 17,q = 19 =>N = 323(2)lcm(p-1,q-1)=>lcm(16,18)=>L= 144(3)gcd(E,L)=1 =>E=5(4)E乘以几可以mode L =1? D=29可以满足(5)得到公钥为:E=5,N=323(6)得到私钥为:D=29,N=323(7)加密 明文的E次方 mod N = 123的5次方 mod 323 = 225(密文)(8)解密 密文的D次方 mod N = 225的29次方 mod 323 = 123(明文)----------------3)openssl生成密钥命令生成强度是 512 的 RSA 私钥:$ openssl genrsa -out private.pem 512以明文输出私钥内容:$ openssl rsa -in private.pem -text -out private.txt校验私钥文件:$ openssl rsa -in private.pem -check从私钥中提取公钥:$ openssl rsa -in private.pem -out public.pem -outform PEM -pubout以明文输出公钥内容:$ openssl rsa -in public.pem -out public.txt -pubin -pubout -text使用公钥加密小文件:$ openssl rsautl -encrypt -pubin -inkey public.pem -in msg.txt -out msg.bin使用私钥解密小文件:$ openssl rsautl -decrypt -inkey private.pem -in msg.bin -out a.txt将私钥转换成 DER 格式:$ openssl rsa -in private.pem -out private.der -outform der将公钥转换成 DER 格式:$ openssl rsa -in public.pem -out public.der -pubin -outform der-----------------

7.数字签名


1.数字签名的应用场景
需要严格验证发送方身份信息情况
2.数字签名原理
1)客户端处理
①对"消息"进行 HASH 得到 "消息摘要"
②发送方使用自己的私钥对"消息摘要" 加密(数字签名)
③把数字签名附着在"报文"的末尾一起发送给接收方
2)服务端处理
①对"消息" HASH 得到 "报文摘要"
②使用公钥对"数字签名" 解密
③对结果进行匹配

8.数字证书


1.简单说明证书和驾照很相似,里面记有姓名、组织、地址等个人信息,以及属于此人的公钥,并有认证机构施加数字签名,只要看到公钥证书,我们就可以知道认证机构认证该公钥的确属于此人
2.数字证书的内容1)公钥2)认证机构的数字签名
3.证书的生成步骤1)生成私钥 openssl genrsa -out private.pem 10242)创建证书请求 openssl req -new -key private.pem -out rsacert.csr3)生成证书并签名,有效期10年 openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt4)将 PEM 格式文件转换成 DER 格式 openssl x509 -outform der -in rsacert.crt -out rsacert.der5)导出P12文件 openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt4.iOS开发中的注意点1)在iOS开发中,不能直接使用 PEM 格式的证书,因为其内部进行了Base64编码,应该使用的是DER的证书,是二进制格式的2)OpenSSL默认生成的都是PEM格式的证书

9.HTTPS的基本使用


1.https简单说明HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。2.HTTPS和HTTP的区别主要为以下四点:一、https协议需要到ca申请证书,一般免费证书很少,需要交费。二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。3.简单说明
1)HTTPS的主要思想是在不安全的网络上创建一安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的保护。
2)HTTPS的信任继承基于预先安装在浏览器中的证书颁发机构(如VeriSign、Microsoft等)(意即“我信任证书颁发机构告诉我应该信任的”)。
3)因此,一个到某网站的HTTPS连接可被信任,如果服务器搭建自己的https 也就是说采用自认证的方式来建立https信道,这样一般在客户端是不被信任的。
4)所以我们一般在浏览器访问一些https站点的时候会有一个提示,问你是否继续。4.对开发的影响。
4.1 如果是自己使用NSURLSession来封装网络请求,涉及代码如下。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];NSURLSessionDataTask *task =  [session dataTaskWithURL:[NSURL URLWithString:@"https://www.apple.com"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);}];[task resume];
}/*只要请求的地址是HTTPS的, 就会调用这个代理方法我们需要在该方法中告诉系统, 是否信任服务器返回的证书Challenge: 挑战 质问 (包含了受保护的区域)protectionSpace : 受保护区域NSURLAuthenticationMethodServerTrust : 证书的类型是 服务器信任*/
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler
{//    NSLog(@"didReceiveChallenge %@", challenge.protectionSpace);NSLog(@"调用了最外层");// 1.判断服务器返回的证书类型, 是否是服务器信任if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {NSLog(@"调用了里面这一层是服务器信任的证书");/*NSURLSessionAuthChallengeUseCredential = 0,                     使用证书NSURLSessionAuthChallengePerformDefaultHandling = 1,            忽略证书(默认的处理方式)NSURLSessionAuthChallengeCancelAuthenticationChallenge = 2,     忽略书证, 并取消这次请求NSURLSessionAuthChallengeRejectProtectionSpace = 3,            拒绝当前这一次, 下一次再询问*/
//        NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];NSURLCredential *card = [[NSURLCredential alloc]initWithTrust:challenge.protectionSpace.serverTrust];completionHandler(NSURLSessionAuthChallengeUseCredential , card);}
}
// 如果是使用AFN框架,那么我们不需要做任何额外的操作,AFN内部已经做了处理。
5.ATS
1)iOS9中新增App Transport Security(简称ATS)特性, 让原来请求时候用到的HTTP,全部都转向TLS1.2协议进行传输。
2)这意味着所有的HTTP协议都强制使用了HTTPS协议进行传输。
3)如果我们在iOS9下直接进行HTTP请求是会报错。系统会告诉我们不能直接使用HTTP进行请求,需要在Info.plist中控制ATS的配置。"NSAppTransportSecurity"是ATS配置的根节点,配置了节点表示告诉系统要走自定义的ATS设置。"NSAllowsAritraryLoads"节点控制是否禁用ATS特性,设置YES就是禁用ATS功能。
4)有两种解决方法,一种是修改配置信息继续使用以前的设置。另一种解决方法是所有的请求都基于基于"TLS 1.2"版本协议。(该方法需要严格遵守官方的规定,如选用的加密算法、证书等)/*ATS默认的条件1)服务器TLS版本至少是1.2版本2)连接加密只允许几种先进的加密3)证书必须使用SHA256或者更好的哈希算法进行签名,要么是2048位或者更长的RSA密钥,要么就是256位或更长的ECC密钥。*/AFSecurityPolicy,内部有三个重要的属性,如下:AFSSLPinningMode SSLPinningMode;    //该属性标明了AFSecurityPolicy是以何种方式来验证
BOOL allowInvalidCertificates;      //是否允许不信任的证书通过验证,默认为NO
BOOL validatesDomainName;           //是否验证主机名,默认为YES"AFSSLPinningMode"枚举类型有三个值,分别是AFSSLPinningModeNone、AFSSLPinningModePublicKey、AFSSLPinningModeCertificate。"AFSSLPinningModeNone"代表了AFSecurityPolicy不做更严格的验证,"只要是系统信任的证书"就可以通过验证,不过,它受到allowInvalidCertificates和validatesDomainName的影响;"AFSSLPinningModePublicKey"是通过"比较证书当中公钥(PublicKey)部分"来进行验证,通过SecTrustCopyPublicKey方法获取本地证书和服务器证书,然后进行比较,如果有一个相同,则通过验证,此方式主要适用于自建证书搭建的HTTPS服务器和需要较高安全要求的验证;"AFSSLPinningModeCertificate"则是直接将本地的证书设置为信任的根证书,然后来进行判断,并且比较本地证书的内容和服务器证书内容是否相同,来进行二次判断,此方式适用于较高安全要求的验证。如果HTTPS服务器满足ATS默认的条件,而且SSL证书是通过权威的CA机构认证过的,那么什么都不用做。如果上面的条件中有任何一个不成立,那么都只能修改ATS配置。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Easyexcel(6-单元格合并)

相关文章链接 Easyexcel(1-注解使用)Easyexcel(2-文件读取)Easyexcel(3-文件导出)Easyexcel(4-模板文件)Easyexcel(5-自定义列宽)Easyexcel(6-单…

三种蓝牙架构实现方案

一、蓝牙架构方案 1、hostcontroller双芯片标准架构 手机里面包含很多SoC或者模块,每颗SoC或者模块都有自己独有的功能,比如手机应用跑在AP芯片上,显示屏,3G/4G通信,WiFi/蓝牙等都有自己专门的SoC或者模块&#xff0…

docker 容器运行Ruoyi-cloud

目录 1,linux系统安装openjdk1.8,mvn,dokcer,node,git 2,拉取代码 1)查看gitee仓库地址 2)创建/app文件夹,进入app目录 3)clone代码 4)修改配置文件中nacos地址 3,构建项目 1&…

QT简易项目 数据库可视化界面 数据库编程SQLITE QT5.12.3环境 C++实现

案例需求&#xff1a; 完成数据库插入&#xff0c;删除&#xff0c;修改&#xff0c;查看操作。 分为 插入&#xff0c;删除&#xff0c;修改&#xff0c;查看&#xff0c;查询 几个模块。 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget…

刷题——字符串中的单词数(力扣)

文章目录 一、读题二、思路问题1&#xff1a;解决思路&#xff1a;分割方法&#xff1a;方法1、方法2、 三、代码实现&#xff1a;方法1、方法2、 一、读题 题目来源&#xff1a;https://leetcode.cn/problems/number-of-segments-in-a-string/description/ 首先看例子&#xf…

【人工智能】PyTorch、TensorFlow 和 Keras 全面解析与对比:深度学习框架的终极指南

文章目录 PyTorch 全面解析2.1 PyTorch 的发展历程2.2 PyTorch 的核心特点2.3 PyTorch 的应用场景 TensorFlow 全面解析3.1 TensorFlow 的发展历程3.2 TensorFlow 的核心特点3.3 TensorFlow 的应用场景 Keras 全面解析4.1 Keras 的发展历程4.2 Keras 的核心特点4.3 Keras 的应用…

什么是 WPF 中的依赖属性?有什么作用?

依赖属性&#xff08;Dependency Property&#xff09;是 WPF 的一个核心概念&#xff0c;它为传统的 .NET 属性提供了增强功能&#xff0c;支持绑定、样式、动画和默认值等功能。通过依赖属性&#xff0c;WPF 提供了一种灵活的数据驱动的方式来处理 UI 属性。 1. 什么是依赖属…

在win10环境部署opengauss数据库(包含各种可能遇到的问题解决)

适用于windows环境下通过docker desktop实现opengauss部署&#xff0c;请审题。 文章目录 前言一、部署适合deskdocker的环境二、安装opengauss数据库1.配置docker镜像源2.拉取镜像源 总结 前言 注意事项&#xff1a;后面docker拉取镜像源最好电脑有科学上网工具如果没有科学上…

2024年11月25日Github流行趋势

项目名称&#xff1a;flux 项目维护者&#xff1a;timudk jenuk apolinario zeke thibautRe项目介绍&#xff1a;FLUX.1模型的官方推理仓库。项目star数&#xff1a;17,381项目fork数&#xff1a;1,229 项目名称&#xff1a;screenshot-to-code 项目维护者&#xff1a;abi cle…

Python 爬虫从入门到(不)入狱学习笔记

爬虫的流程&#xff1a;从入门到入狱 1 获取网页内容1.1 发送 HTTP 请求1.2 Python 的 Requests 库1.2 实战&#xff1a;豆瓣电影 scrape_douban.py 2 解析网页内容2.1 HTML 网页结构2.2 Python 的 Beautiful Soup 库 3 存储或分析数据&#xff08;略&#xff09; 一般爬虫的基…

Linux麦克风录音实战

在 Linux 上使用麦克风进行录音可以通过多种方式实现&#xff0c;包括使用命令行工具、图形界面应用程序以及编程接口。下面我将介绍几种常见的方法&#xff0c;从简单的命令行工具到使用 PortAudio 库进行编程。 一. 使用arecord命令行工具 arecord 是 ALSA&#xff08;Adva…

oracle会话追踪

一 跟踪当前会话 1.1 查看当前会话的SID,SERIAL# #在当前会话里执行 示例&#xff1a; SQL> select distinct userenv(sid) from v$mystat; USERENV(SID) -------------- 1945 SQL> select distinct sid,serial# from v$session where sid1945; SID SERIAL# …

ThingsBoard规则链节点:Azure IoT Hub 节点详解

目录 引言 1. Azure IoT Hub 节点简介 2. 节点配置 2.1 基本配置示例 3. 使用场景 3.1 数据传输 3.2 数据分析 3.3 设备管理 4. 实际项目中的应用 4.1 项目背景 4.2 项目需求 4.3 实现步骤 5. 总结 引言 ThingsBoard 是一个开源的物联网平台&#xff0c;提供了设备…

数据结构(Java版)第二期:包装类和泛型

目录 一、包装类 1.1. 基本类型和对应的包装类 1.2. 装箱和拆箱 1.3. 自动装箱和自动拆箱 二、泛型的概念 三、引出泛型 3.1. 语法规则 3.2. 泛型的优点 四、类型擦除 4.1. 擦除的机制 五、泛型的上界 5.1. 泛型的上界的定义 5.2. 语法规则 六、泛型方法 6.1…

STM32端口模拟编码器输入

文章目录 前言一、正交编码器是什么&#xff1f;二、使用步骤2.1开启时钟2.2配置编码器引脚 TIM3 CH1(PA6) CH2 (PA7)上拉输入2.3.初始化编码器时基2.4 初始化编码器输入2.5 配置编码器接口2.6 开启定时器2.7获取编码器数据 三、参考程序四、测试结果4.1测试方法4.2串口输出结果…

商业物联网:拥抱生产力的未来

在现代商业格局中&#xff0c;数据占据至高无上的地位。物联网&#xff08;IoT&#xff09;站在这场数字革命的前沿&#xff0c;将以往模糊不清的不确定因素转变为可衡量、可付诸行动的深刻见解。物联网技术为日常物品配备传感器与连接功能&#xff0c;使其能够实时收集并传输数…

UE5肉鸽游戏教程学习

学习地址推荐&#xff1a;UE5肉鸽项目实战教程_哔哩哔哩_bilibili

【Python】分割秘籍!掌握split()方法,让你的字符串处理轻松无敌!

在Python开发中&#xff0c;字符串处理是最常见也是最基础的任务之一。而在众多字符串操作方法中&#xff0c;split()函数无疑是最为重要和常用的一个。无论你是Python新手&#xff0c;还是经验丰富的开发者&#xff0c;深入理解并熟练运用split()方法&#xff0c;都将大大提升…

sql工具!好用!爱用!

SQLynx的界面设计简洁明了&#xff0c;操作逻辑清晰易懂&#xff0c;没有复杂的图标和按钮&#xff0c;想对哪部分操作就在哪里点击右键&#xff0c;即使你是数据库小白也能轻松上手。 尽管SQLynx是一款免费的工具&#xff0c;但是它的功能却丝毫不逊色于其他付费产品&#xff…

C语言菜鸟入门·关键字·union的用法

目录 1. 简介 2. 访问成员 2.1 声明 2.2 赋值 3. 共用体的大小 4. 与typedef联合使用 5. 更多关键字 1. 简介 共用体&#xff08;union&#xff09;是一种数据结构&#xff0c;它允许在同一内存位置存储不同的数据类型&#xff0c;但每次只能存储其中一种类型的…