哈希算法

一、哈希算法

验证数据完整性可以用哈希算法。对发送数据和接收数据的哈希值进行比对,如果一致,证明接收数据与发送数据一致,及数据完整。

SDK提供了哈希算法有关的API,支持MD2、MD4、MD5、SHA-1、SHA224、SHA256、SHA384、SHA512算法。方法声明在< CommonCrypto/CommonDigest.h >
举例:MD5算法API使用方法
MD5加密,结果为32位十六进制数(一个字符8位,一个十六进制数4位,所以1个字符的位置可以装2个十六进制数,因此32位十六进制数可以用16个字符的数组来装)。

(1)加密字符串:

extern unsigned char *CC_MD5(const void *data, CC_LONG len, unsigned char *md)

第一个参数为明文;
第二个参数为明文的长度,要把长度强制转换成CC_LONG类型;
第三个参数为用来承接密文的字符数组,数组长度就是16,可以用宏定义CC_MD5_DIGEST_LENGTH表示。

(2)加密任意对象:
先将对象转换成NSData类型(可以先将对象转换成文件,再从文件读`出NSData)

NSData *data = DataFromCertainObject。。。

需要一个类型为CC_MD5_CTX的伴随指针:

CC_MD5_CTX c;

需要一个用来承接密文的unsigned char数组:

unsigned char dataEncrypted[CC_MD5_DIGEST_LENGTH];

然后执行加密流程:

CC_MD5_Init(&c);
CC_MD5_Update(&c, data.bytes, (CC_LONG)data.length);
CC_MD5_Final(dataEncrypted,&c);

注意以上方法的参数类型。

(3) 要把unsigned char数组转换成十六进制字符串输出,就把char
数组的字符一个个地以%2X的格式输出。

for (int i=0; i<CC_MD5_DIGEST_LENGTH; i++) {
        NSLog(@“%02X”,charArray[i]);
    }

二、基于哈希算法的身份验证hmac

客户端用服务器发送来的随机数加用户密码一起计算哈希值(hash1),并发送给服务器。服务器用其发送给客户端的随机数以及收到的用户密码一起计算哈希值(hash2),与从客户端收到的哈希值进行比对,如果一致(hash1=hash2)则通过验证。

SDK提供了算法,方法声明在< CommonCrypto/CommonHMAC.h >中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值