2.密码学之HASH&对称加密

HSAH

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。

简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数


Hash的特点

•算法是公开的

•对相同数据运算,得到的结果是一样的

•对不同数据运算,如MD5得到的结果默认是128位,32个字符(16进制标识)

•这玩意没法逆运算(32个字符所能表达的数据是不定长的,散列碰撞)

•信息摘要,信息“指纹”,是用来做数据识别的。


加密方式

非对称加密 : RSA

对称加密 : DES 、 3DES 、AES

HASH: MD5 、 SHA1 / SHA256


用途

•用户密码的加密

•搜索引擎

•版权 (相似的文件的hash值不同,可视为正版盗版的一个判定依据,同个文件改文件名或类型或copy后,hash值并不发生改变,只有改变二进制排列才会产生变化)

•数字签名


HASH加密方式:

1.加盐 坏处:盐一旦泄露 就不安全了,盐是写死的。

2.HMAC加密方案

使用一个密钥加密,并且做了两次散列, 在实际开发中,密钥来自于服务器

- (NSString*)hmacMD5StringWithKey:(NSString*)key {}

例如用户注册登录:

注册时先把账号发给服务器匹配账号是否可以使用,可以使用后随机生成key密钥,然后将密钥发给客户端,客户端拿到key值后再进行HMAC加密,加密之后得到的HASH值发给服务器。

如果换了设备登录的话,就找服务器要对应账号的key,输入密码用key进行HMAC加密,然后将加密的结果发给服务器验证,验证成功后登录成功,将key保存在本地,没有登录成功将key删除。

加一步:如果设备开启了授权设备锁,那么向服务器索要key的时候会向已授权设备发送验证, 授权设备允许后将key给与新的设备。

漏洞:不需要获得用户的真实密码,直接将加密后的md5值发送给服务器,一样可以登录。

HMAC

升级后HMAC加密:

在生成的 HMAC哈希值 的后面添加一个当前时间的字符串(可能是当前的年月日时分),在求一次md5,然后发送给服务器,服务器验证 HMAC哈希值 加上当前的时间的字符串(有时加上上一分钟的字符创)进行md5运算,这样这个值的有效期在1分钟到1分钟59秒之间。

这样的好处是每次加密的结果都不一样,这个时间戳是服务器给的。

密码加密方式

•直接使用MD5

•MD5加盐

•HMAC加密方案

•添点东西

源代码


 #define CC_MD5_DIGEST_LENGTH    16          /* digest length in bytes */ 16个字节,16*8 = 128位的二进制

    constchar*str =self.UTF8String;//加密数据的指针

    uint8_t buffer[CC_MD5_DIGEST_LENGTH];//加密数据的长度,

    CC_MD5(str, (CC_LONG)strlen(str), buffer);、

    return [self stringFromBytes:buffer length:CC_MD5_DIGEST_LENGTH];


循环遍历,变成16进制 02x的表现形式

数字签名

将原始数据的hash值用RSA进行加密,发给服务器的将是原始数据和用RSA加密后的hash值,然后服务器解密,对比原始数据进行相同算法的hash值,如果匹配说明数据没有被修改过,这就叫做数字签名。

代码签名


对称加密

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

常见算法

•DES    数据加密标准(用得少,因为强度不够)

•3DES  使用3个密钥,对相同的数据执行3次加密,强度增强

•AES  高级密码标准。(钥匙串访问)

应用模式

ECB(Electronic Code Book):电子密码本模式。每一块数据,独立加密

•最基本的加密模式,也就是通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,一般情况下很少用。

CBC(Cipher Block Chaining):密码分组链接模式。使用一个密钥和一个初始化向量[IV]对数据执行加密。加密解密都会依赖前一块数据。(防窃听的技术)

•明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的密文加密后会形成不同的密文,这是目前应用最广泛的模式。CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废(同步错误)。

•CBC可以有效的保证密文的完整性,如果一个数据块在传递是丢失或改变,后面的数据将无法正常解密。

$ openssl enc -des-ecb -k -616263 -nosalt -in message.txt -out msg1.bin  (用ecb进行加密)

$ openssl enc -des-cbc -iv 0102030405060708 -k 616263 -nosalt -in message.txt -out msg4.bin  (用cbc进行加密)

xxd msg1.bin  (查看)

- k 616263 传递的就是二进制 (abc)


OpenSSL


终端命令:

•加密:

•AES(ECB)加密“hello”字符串

$ echo -n hello | openssl enc -aes-128-ecb -K 616263 -nosalt | base64

•AES(CBC)加密“hello”字符串

$ echo -n hello | openssl enc -aes-128-cbc -K 616263 -nosalt -iv 0102030405060708 | base64

•解密:

•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 -K 616263 -iv 0102030405060708 -nosalt -d

代码

需要导入 EncryptionTools.h

iv (初始化向量)有值就是cbc, 无值就是ecb,返回的结果是个base的字符串

加密解密都是它 -- CCCrypt  参数说明

    CCCrypt(<#CCOperation op#>, <#CCAlgorithm alg#>, <#CCOptions options#>, <#const void *key#>, <#size_t keyLength#>, <#const void *iv#>, <#const void *dataIn#>, <#size_t dataInLength#>, <#void *dataOut#>, <#size_t dataOutAvailable#>, <#size_t *dataOutMoved#>)

     1、kCCEncrypt 加密/kCCDecrypt 解密

     2、加密算法。

     3、加密选项:ECB/CBC

     4、加密的密钥

     5、密钥的长度

     6、iv 初始化向量

     7、加密的数据

     8、加密的数据长度

     9、密文的内存地址

     10、密文缓冲区的大小

     11、加密结果大小

弊端:可以 symbolic 断点断住 CCCrypt 函数

函数调用的参数存在cpu的寄存器中

register read x6   (x6 是因为第7个参数是加密的数据)

p (char *)0x00000001c000ec20    (显示加密的数据)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容