哈希算法

1:哈希算法特性

  • 无论原始数据长度为多少,生成的散列值,长度固定。

  • 原始数据发生细微变化,散列值变化巨大。

  • 较强的 抗碰撞性。
    校验数据是否被篡改。登录校验。秒传。
    不同的数据,生成的散列值不同。相同数据生成的散列值一致。

  • 不可逆!—— 不能用来加解密

2: 常用哈希算法

  • MD5 --得到散列值长度16types --为2进制。
  • sh224 --得到散列值长度28types --为2进制。
  • sh256 --得到散列值长度32types --为2进制。
  • sh384 --得到散列值长度48types --为2进制。
  • sh512 --得到散列值长度64types --为2进制。
注意:
	上述散列值长度为二进制数据长度
	通常散列值采用 16 进制格式的数字串进行表示,字符串长度是原来的2倍长.

3:常用的 OpenSSL 中的函数

MD5
	#include <openssl/md5.h>
	#include <openssl/sha.h>  ---- 头文件

// openssl中: int 类型的返回值:成功:1。失败:0。
// 相关操作函数

// 初始化
int MD5_Init(MD5_CTX *c);
	c: 传出。MD5_CTX c; --> &c;
// 添加原始数据
int MD5_Update(MD5_CTX *c, const void *data, size_t len);  // 可以调用多次,添加数据
	c:传入传出。
	data:传入。原始数据。
	len:data的长度。
// 生成散列值	
int MD5_Final(unsigned char *md, MD5_CTX *c);
	md:传出。	
// 一步生成散列值。	—— 只能传递一次数据。
unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md);
	d:原始数据。
	n:d的长度。
	md:散列值。传出。
	返回:散列值。返回。```


####  sha 系列

```c
# define SHA_DIGEST_LENGTH	20
# define SHA224_DIGEST_LENGTH    28
# define SHA256_DIGEST_LENGTH    32
# define SHA384_DIGEST_LENGTH    48
# define SHA512_DIGEST_LENGTH    64
  
int SHA1_Init(SHA_CTX *c);
int SHA1_Update(SHA_CTX *c, const void *data, size_t len);
int SHA1_Final(unsigned char *md, SHA_CTX *c);
unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md);

int SHA224_Init(SHA256_CTX *c);
int SHA224_Update(SHA256_CTX *c, const void *data, size_t len);
int SHA224_Final(unsigned char *md, SHA256_CTX *c);
unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md);```

## 4: 哈希算法的应用

+ 主要用于得到数据的散列值
+ 哈希算法不是对数据进行加密


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值