hmac

iOS 密码学一

天大地大妈咪最大 提交于 2020-02-13 19:08:32
文章目录 MD5加盐和HMAC 加密部分 一个故事讲完https 对称加密的经典算法 2种加密的方式 终端操作加密的命令 MD5加盐和HMAC 123+一堆乱七八糟的东西,前后中间随便加,让别人无法直接破解123 盐的不足之处:1.这个盐是固定的,只要是开发者都得知道这个盐(iOS端,Android端,服务器端)如果泄漏出去就能破戒掉。 2.盐写死了,1.0写入已经对密码加密了,2.0版本如果要改,就不能改了。 HMAC:使用广泛,给定一个密钥,做明文和密钥的拼接,然后做2次MD5的计算。 加密部分 加密算法 —Hash 散列函数。是不可逆的 加密算法不应该都是不可逆的。 以下两种算法是可逆的 1.对称加密 传统的加密算法 加密和解密都使用一个密钥。密钥的保密工作非常重要。 2.非对称加密RSA(现代加密算法) 有公钥和私钥:1.用公钥加密,私钥解密。2.用私钥加密,公钥解密 明文>加密-密文 密文>解密-明文 一个故事讲完https A和B网络聊天,相隔很远,有一天他们突然发现,他们一直是在明文聊天,相当于在网上裸奔,如果任何一个不怀好意的人,都可以监听他们的聊天内容,打开他们传输的数据包,窥探他们的隐私。 A和B就商量做一个数据加密! 逻辑是:发送信息之前,加密;B收到的时候进行解密。 这时对称加密。问题就来了,他们需要先约定一个密钥,约定密钥的过程也会被监听。

注册与登录的加密算法

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-08 10:22:43
算法目的 提供固定的 秘钥 和 明文 能够产生不同的密文摘要 hamc 算法 大概流程是 使用一个秘钥 对明文进行两次散列操作得到密文摘要 哈希(散列)函数 MD5 SHA1 SHA256 注册 向服务器请求一个随机的秘钥 把注册的密码进行 md5.hmac(hamc使用md5的散列函数来操作字符)加密 : md5.hmac(key,message) ==> 密文摘要(key : 秘钥 , message : 明文) : md5.hmac密文摘要 把摘要提交到服务器,同时服务器把 该 秘钥 和 md5.hmac密文摘要 持久化到数据库 登录 客户端向服务器请求秘钥(注册时候存储的秘钥) 在用户提交数据的时候对密码进行加密 : md5.hmac(key , pwd) ==> 子摘要 md5.hamc(key , (子摘要 + '当前提交时间')) ==> 总摘要 当服务器接收到总摘要消息的时候处理流程 : 取出 秘钥 key , 存储的密文摘要 pwdDigest 根据以下公式计算两段密文摘要 : md5.hamc(key , '当前提交时间' + pwdDigest) ==>目的摘要1 md5.hamc(key , '当前提交时间 + 1(分钟)' + pwdDigest) ==>目的摘要2 如果用户提交的 总摘要 == 目的摘要1 || 总摘要 == 目的摘要2 为密码正确

restful 架构详解

两盒软妹~` 提交于 2020-01-21 04:29:22
场景:因为自己做的后台,一直有为前端提供接口,一直知道用的是restful框架,可是没有深入理解,先整理如下。 转载自:http://kb.cnblogs.com/page/512047/ http://kb.cnblogs.com/page/521718/ 1. 什么是REST   REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:“我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构约束条件和原则。” 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。   REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。虽然REST本身受Web技术的影响很深, 但是理论上REST架构风格并不是绑定在HTTP上,只不过目前HTTP是唯一与REST相关的实例。 所以我们这里描述的REST也是通过HTTP实现的REST。    2. 理解RESTful  

How to reproduce an SHA256-based HMAC from R in Python 3

允我心安 提交于 2020-01-16 00:46:49
问题 I am trying to reproduce salted sha256 output from R code in Python: library(openssl) res = sha256("test@gmail.com", key = "111") res # [1] "172f052058445afd9fe3afce05bfec573b5bb4c659bfd4cfc69a59d1597a0031" import hashlib, binascii dk = hashlib.pbkdf2_hmac(='sha256', b'test@gmail.com', b'111', 0) binascii.hexlify(dk) # b'494c86307ffb9e9e31c4ec8782af6498e91272c011a316c242d9164d765be257' How can I make output in python match R? 回答1: I can't quite reproduce your issue. The following keys match

Is Perl Data::UUID a strong symmetric key source?

不打扰是莪最后的温柔 提交于 2020-01-15 15:33:56
问题 I'm considering using Data::UUID Perl module to generate a 256 bit symmetric key for use with the HMAC_SHA256 algorithm. Each call should give me a unique string of 128 bits so I'm thinking of doing something like the following: use Data::UUID; my $ug = new Data::UUID; my $uuid1 = $ug->to_hexstring($ug->create()); my $uuid2 = $ug->to_hexstring($ug->create()); my $256_bit_key = $uuid1 . $uuid2; Is this key cryptographically strong? 回答1: No. Use Crypt::OpenSSL::Random or another crypto-strong

几种加密算法

别说谁变了你拦得住时间么 提交于 2020-01-13 16:03:28
1、加密方式分类: 数据加密方式 描述 主要解决的问题 常用算法 对称加密 指数据加密和解密使用相同的密钥 数据的机密性 DES, AES 非对称加密 也叫公钥加密,指数据加密和解密使用不同的密钥--密钥对儿 身份验证 DSA,RSA 单向加密 指只能加密数据,而不能解密数据 数据的完整性 MD5,SHA系列算法 2、加密相关名词解释   HASH:一般翻译为‘散列’,就是指任意长度的输入,通过散列算法,变成固定长度的输出,该输出值就是散列值。这种转换是一种压缩映射,也就是散列值的空间通常远小于输入的空间,不同输入的可能会散列成相同的输出,而不可能从散列值来唯一的确认输入值。简单的说,hash算法就是一种将任意长度的消息压缩为某一个固定长度的消息摘要的函数。   MD5:全程Message Digest algorithm 5,即信息摘要算法。该算法可以生成定长的数据指纹,被广泛应用于加密和解密技术,常用于文件和数据完整性校验。   SHA:全称为Secure Hash ALgorithm,即安全散列算法/安全哈希算法。该算法为数字签名等密码学应用中的重要工具,被广泛应用于电子商务等信息安全领域。根据生成密文长度而命名的各种具体的算法有1、SHA1(160bits)、SHA224(224bits)、SHA384(384bits)等。   HMAC:全称为Hash Message

Generate signature in Elixir and PHP using hmac

只愿长相守 提交于 2020-01-13 09:55:14
问题 I try to generate a signature using Elixir, which has a same value as PHP does. For example the code in PHP is $signature = base64_encode(hash_hmac("sha256", "abc", "def")); and the output will be Mzk3ZjQ2NzM0MWU0ZDc4YzQ3NDg2N2VmMzI2MWNkYjQ2YzBlMTAzNTFlOWE5ODk5NjNlNmNiMmRjZTQwZWU1ZA== How should I generate the signature that has the same value in Elixir. I tried something like below iex(9)> :crypto.hmac(:sha256, "abc", "def") |> Base.encode64 │ "IOvA8JNERwE081BA9j6pix2OQUISlJ7lxQBCnRXqsIE="

hashlib,logging模块

Deadly 提交于 2020-01-13 04:22:42
hashlib 模块 作用:hash是一种算法,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法,该算法接受传入的内容,经过运算得到一串hash值 特点: 1.只要传入的内容一样,得到的hash值一样,可用于非明文密码传输时密码校验 2.不能有hash值反解成内容,既可以保证非明文密码的安全性 3.只要使用hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的,可以用于文本的哈希处理, 缺陷:哈希加密算法虽然看起来很厉害,但是也存在一定的缺陷,既可以通过撞库可以反解. import hashlib m=hashlib.md5() pwd=b'123' #pwd.encode('uft8') m.update(pwd) m.hexdigest() #202cb962ac59075b964b07152d234b70 hmac模块说明:为了防止密码被撞库,我们可以使用另外一个hmac模块,它内部对我们创建key和内容做过某种处理后再加密,如果要保证hmac模块的最终结果一致,必须保证 1.hmac.new括号内指定的初始key一样 2.无论update多少次,校验的内容累加到一起是一样的内容 hmac模块 import hmac m=hmac.new(b'123') m.update(b'123') m.hexdigest()

Node之加密与解密处理

[亡魂溺海] 提交于 2020-01-11 15:06:32
crypto模块概述 在Node.js中,使用OpenSSL类库作为其内部实现加密与解密处理的基础手段,这是因为目前OpenSSL已经成为了一个经过严格测试的可靠的加密与解密算法的实现工具。 在Node.js中,OpenSSL类库被封装在crypto模块中,因此开发者可以使用crypto模块来实现各种不同的加密与解密处理。例如,crypto模块中包含了类似MD5或SHA-1之类的散列算法。开发者也可以通过crypto模块来实现HMAC运算 [1]。在crypto模块中,提供了一些加密方法来实现数据的可靠加密。另外,在crypto模块中,也提供了一些利用HMAC运算来实现数字签名以及对数字签名进行验证的方 法。 查看Node.js中能够使用的所有加密算法 在crypto模块中,为每一种加密算法定义了一个类。可以使用getCiphers方法 来查看Node.js中能够使用的所有加密算法。 crypto.getCiphers() 查看Node.js中能够使用的所有散列算法 可以使用getHashes方法来查看在Node.js中能够使用的所有散列算法。 crypto.getHashes() 散列算法 散列(哈希)算法用来实现一些重要处理,例如,在允许对一段数据进行验证的前提下,将数据进行模糊化,或者为一大段数据提供一个验证码 在node中,为了使用散列算法

HMAC in Node.js crypto vs. Google Apps Script (GAS)

六月ゝ 毕业季﹏ 提交于 2020-01-11 05:13:07
问题 Can you anybody explain me a difference between creating HmacSha512 signature using Crypto module of Node.JS and Google Apps Script? Code 1 - Node.JS var secret = "my secret"; var message = "message"; var crypto = require("crypto"); var hmac = new crypto.createHmac("sha512", secret); var signature = hmac.update(message).digest("base64"); console.log(signature); Code 1 - Google Apps Script var secret = "my secret"; var message = "message"; var signature = Utilities.base64Encode(Utilities