5、Hash对称加密

news/2024/11/6 17:22:34/

一、Hash

  • Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数

1.1 HASH的特点

  • 算法是公开的
  • 相同的数据结果相同
  • 对不同数据运算,如MD5得到的结果默认是128位, 32个字符(16进制标识); 不同的数据长度相同
  • 不可逆运算
  • 信息摘要,信息 “指纹”,是用来做数据识别的(密码、版权、百度云数据识别)

1.2 HASH的用途

  • 用户密码的加密
  • 数字签名
  • 搜索引擎
  • 版权

1.2.1 、密码加密

通过运算HASH算法,给用户的密码进行加密

1.2.1.1 密码加密方式

  • 直接使用MD5. 可以被反查询
  • MD5加盐(固定的盐有安全隐患)
  • HMAC加密方案: 用动态KEY来加密数据
  • HASH+时间戳. 这样的方式,每次加密结果不一样(受时间的影响比较大)

1.2.2、数字签名

数字签名,就是用于鉴别数字信息的方法

  • 算法: RSA + HASH
  • 目的: 验证数据的完整性,不被篡改
  • 逻辑:
    • 1、数据报文(原始数据)的HASH值
    • 2、使用RSA加密HASH值(这部分数据就是原始数据的签名信息)
    • 3、将原始数据+数字签名一起打包发送传递

1.3 hash加解密终端命令使用

#pragma mark - 散列函数/***  计算MD5散列结果*  终端测试命令:*  @code*  md5 -s "string"*  @endcode*  <p>提示:随着 MD5 碰撞生成器的出现,MD5 算法不应被用于任何软件完整性检查或代码签名的用途。<p>*  @return 32个字符的MD5散列字符串*/
- (NSString *)md5String;/***  计算SHA1散列结果*  终端测试命令:*  @code*  echo -n "string" | openssl sha -sha1*  @endcode**  @return 40个字符的SHA1散列字符串*/
- (NSString *)sha1String;/***  计算SHA256散列结果*  终端测试命令:*  @code*  echo -n "string" | openssl sha -sha256*  @endcode**  @return 64个字符的SHA256散列字符串*/
- (NSString *)sha256String;/***  计算SHA 512散列结果*  终端测试命令:*  @code*  echo -n "string" | openssl sha -sha512*  @endcode**  @return 128个字符的SHA 512散列字符串*/
- (NSString *)sha512String;#pragma mark - HMAC 散列函数/***  计算HMAC MD5散列结果**  终端测试命令:*  @code*  echo -n "string" | openssl dgst -md5 -hmac "key"*  @endcode**  @return 32个字符的HMAC MD5散列字符串*/
- (NSString *)hmacMD5StringWithKey:(NSString *)key;/***  计算HMAC SHA1散列结果**  终端测试命令:*  @code*  echo -n "string" | openssl sha -sha1 -hmac "key"*  @endcode**  @return 40个字符的HMAC SHA1散列字符串*/
- (NSString *)hmacSHA1StringWithKey:(NSString *)key;/***  计算HMAC SHA256散列结果**  终端测试命令:*  @code*  echo -n "string" | openssl sha -sha256 -hmac "key"*  @endcode**  @return 64个字符的HMAC SHA256散列字符串*/
- (NSString *)hmacSHA256StringWithKey:(NSString *)key;/***  计算HMAC SHA512散列结果**  终端测试命令:*  @code*  echo -n "string" | openssl sha -sha512 -hmac "key"*  @endcode**  @return 128个字符的HMAC SHA512散列字符串*/
- (NSString *)hmacSHA512StringWithKey:(NSString *)key;#pragma mark - 文件散列函数/***  计算文件的MD5散列结果**  终端测试命令:*  @code*  md5 file.dat*  @endcode**  @return 32个字符的MD5散列字符串*/
- (NSString *)fileMD5Hash;/***  计算文件的SHA1散列结果**  终端测试命令:*  @code*  openssl sha -sha1 file.dat*  @endcode**  @return 40个字符的SHA1散列字符串*/
- (NSString *)fileSHA1Hash;/***  计算文件的SHA256散列结果**  终端测试命令:*  @code*  openssl sha -sha256 file.dat*  @endcode**  @return 64个字符的SHA256散列字符串*/
- (NSString *)fileSHA256Hash;/***  计算文件的SHA512散列结果**  终端测试命令:*  @code*  openssl sha -sha512 file.dat*  @endcode**  @return 128个字符的SHA512散列字符串*/
- (NSString *)fileSHA512Hash;

二、对称加密

  • 对称加密方式: 明文通过密钥加密得到密文. 密文通过密钥解密得到明文

2.1 对称加密常用算法

  • DES: 数据加密标准(用得少,因为强度不够)
  • 3DES: 使用3个密钥,对相同的数据执行3次加密,强度增加
  • AES: 高级密码标准
    • ECB(Electronic Code Book): 电子密码本模式.每一块数据,独立加密
      • 最基本的加密模式,也就是通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易收到密码本重放攻击,一般情况下很少用.
    • CBC(Cipher Block Chaining): 密码分组链接模式. 使用一个密钥和一个初始化向量[IV]对数据执行加密
      • 明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量, 相同的密文加密后会形成不同的密文,这是目前应用最广泛的模式. CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废(同步错误)
      • CBC可以有效的保证密文的完整性, 如果一个数据块在传递时丢失或改变, 后面的数据将无法正常解密.

2.2 对称加密终端加解密测试指令

*  *  DES(ECB)加密*  $ echo -n hello | openssl enc -des-ecb -K 616263 -nosalt | base64*  DES(CBC)加密*  $ echo -n hello | openssl enc -des-cbc -iv 0102030405060708 -K 616263 -nosalt | base64*  AES(ECB)加密*  $ echo -n hello | openssl enc -aes-128-ecb -K 616263 -nosalt | base64*  AES(CBC)加密*  $ echo -n hello | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt | base64*  DES(ECB)解密*  $ echo -n HQr0Oij2kbo= | base64 -D | openssl enc -des-ecb -K 616263 -nosalt -d*  DES(CBC)解密*  $ echo -n alvrvb3Gz88= | base64 -D | openssl enc -des-cbc -iv 0102030405060708 -K 616263 -nosalt -d*  AES(ECB)解密*  $ echo -n d1QG4T2tivoi0Kiu3NEmZQ== | base64 -D | openssl enc -aes-128-ecb -K 616263 -nosalt -d*  AES(CBC)解密*  $ echo -n u3W/N816uzFpcg6pZ+kbdg== | base64 -D | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt -d*


http://www.ppmy.cn/news/50168.html

相关文章

RocketMQ-02

1. RocketMQ集群搭建 1.2 集群搭建方式 1.2.1 集群特点 NameServer是一个几乎无状态节点&#xff0c;可集群部署&#xff0c;节点之间无任何信息同步。 Broker部署相对复杂&#xff0c;Broker分为Master与Slave&#xff0c;一个Master可以对应多个Slave&#xff0c;但是一个…

华为OD机试真题(Java),喊7的次数重排(100%通过+复盘思路)

一、题目描述 喊7是一个传统的聚会游戏&#xff0c;N个人围成一圈&#xff0c;按顺时针从1到N编号。 编号为1的人从1开始喊数&#xff0c;下一个人喊的数字为上一个人的数字加1&#xff0c;但是当将要喊出来的数字是7的倍数或者数字本身含有7的话&#xff0c;不能把这个数字直…

Rabbit与springboot整合-1

目录 1、整体结构 2、pom引入 3、配置文件 4、代码 公共类 controller类 JSON转换类 监听-接收发送消息类 1、整体结构 2、pom引入 <!--rabbitmq--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-st…

【Linux命令行与Shell脚本编程】第七章 Linux文件权限

Linux命令行与Shell脚本编程 第七章 Linux文件权限 文章目录 Linux命令行与Shell脚本编程七,Linux文件权限7.1,Linux的安全性7.1.1,用户信息 /etc/passwd文件7.1.2,用户密码 /etc/shadow文件7.1.3,useradd 添加新用户7.1.4,userdel 删除用户7.1.5, 修改用户1,usermod2,passwd…

2022年NOC大赛创客智慧编程赛道图形化scratch初赛题,包含答案解析

目录 一、单选题 二、多选题 三、判断题 下载打印文档做题: 一、单选题

ArcGIS三体阴影(影像三维)显示马赛克?

我们经常基于ArcGIS通过DEM来做山体阴影 但是有时候你一放大就会出现很强的马赛克的效果 还有我们在利用ArcScene建三维场景 即使数据分辨率很高也会出现马赛克效果 那怎么来解决这个问题呢 让我们的山体阴影显示更加细腻 三维没有马赛克的效果呢&#xff1f; 右键图层选择如…

编程中泛型的使用规则和限制是什么?

泛型是一种程序设计风格&#xff0c;它允许程序员在编写代码时使用一些以后才指定的类型&#xff0c;在实例化时作为参数指明这些类型。泛型主要用于实现通用的数据结构&#xff0c;例如集合、映射、列表等&#xff0c;使得这些数据结构可以存储多种类型的元素。 在泛型使用之…

奥艺大会 | “OLYMP‘ARTS中国设计奖”在2023米兰设计周发布

由国际奥艺委员会、北京国际设计周和中国科学院大学魏桥国科联合实验室共同发起的“OLYMPARTS中国设计奖”&#xff08;OlympArts China Design Awards&#xff09;于当地时间2023年4月19日&#xff0c;在2023米兰设计周“中国日”活动中举行宣传推介活动。 &#xff08;由左至…