- 浏览: 137163 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
Ken艹小哲:
太赞了 哥们 加扣
猜数字问题的最少步数算法. -
chenyuan122912:
...
解决AS3 Socket编程中最令人头疼的问题 -
hyx0914:
有源代码打包下载的吗?
Flex地图分块加载的实现 -
tianhai110:
非常有价值的 测试总结
时间效率,Timer和EnterFrame在FP 10.1之后测试和建议 -
763675117:
你好,fengxiangpiao,看了你的文档,我的需求和你差 ...
解决MovieClip打印问题 转
还记得上学期信息系统安全工程课上杨老师说到04年山大的教授破译了MD5、HAVAL-128、MD4和RIPEMD算法时得意的神情,似乎那玩意是他自己破的一样,哈哈。不过MD5、SHA算法虽然被中国人破解了,但并不代表基于MD5等算法的网上交易认证、数字签名什么的失效了——就比如基于MD5或者SHA算法的HMAC算法。 我们将定义两个固定且不同的字符串ipad,opad:(‘i','o'标志内部与外部) 即为以下步骤: HMAC的典型应用 HMAC的一个典型应用是用在“挑战/响应”(Challenge/Response)身份认证中,认证流程如下[3]: HMAC算法AS3版(作者hurlant): /** 算法的使用: If you want a HMAC of SHA-224 with 128 significant bits, you can use
MD5和SHA-1是一种HASH函数,又称杂凑函数,类似于指纹的应用。在网络安全协议中,杂凑函数用来处理电子签名,将冗长的签名文件压缩为一段独特的数字信息,像指纹鉴别身份一样保证原来数字签名文件的合法性和安全性。经过这些算法的处理,原始信息即使只更动一个字母,对应的压缩信息也会变为截然不同的“指纹”,这就保证了经过处理信息的唯一性。为电子商务等提供了数字认证的可能性。
而HMAC算法需要一个加密用散列函数(表示为H,可以是MD5或者SHA-1)和一个密钥K。我们用B来表示数据块的字节数。(以上所提到的散列函数的分割数据块字长B=64),用L来表示散列函数的输出数据字节数(MD5中L=16,SHA-1中L=20)。鉴别密钥的长度可以是小于等于数据块字长的任何正整数值。应用程序中使用的密钥长度若是比B大,则首先用使用散列函数H作用于它,然后用H输出的L长度字符串作为在HMAC中实际使用的密钥。一般情况下,推荐的最小密钥K长度是L个字节。
ipad = the byte 0x36 重复 B 次
opad = the byte 0x5C 重复 B 次.
计算‘text'的HMAC:
HMAC = H( K XOR opad, H(K XOR ipad, text))
(1) 在密钥K后面添加0来创建一个字长为B的字符串。(例如,如果K的字长是20
字节,B=64字节,则K后会加入44个零字节0x00)
(2) 将上一步生成的B字长的字符串与ipad做异或运算。
(3) 将数据流text填充至第二步的结果字符串中。
(4) 用H作用于第三步生成的数据流。
(5) 将第一步生成的B字长字符串与opad做异或运算。
(6) 再将第四步的结果填充进第五步的结果中。
(7) 用H作用于第六步生成的数据流,输出最终结果
(1) 先由客户端向服务器发出一个验证请求。
(2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)。
(3) 客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。
(4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户
* HMAC
*
* An ActionScript. 3 implementation of HMAC, Keyed-Hashing for Message
* Authentication, as defined by RFC-2104
* Copyright (c) 2007 Henri Torgemane
*
*/
package com.hurlant.crypto.hash
{
import flash.utils.ByteArray;
import com.hurlant.util.Hex;
public class HMAC
{
private var hash:IHash;
private var bits:uint;
/**
* Create a HMAC object, using a Hash function, and
* optionally a number of bits to return.
* The HMAC will be truncated to that size if needed.
*/
public function HMAC(hash:IHash, bits:uint=0) {
this.hash = hash;
this.bits = bits;
}
/**
* Compute a HMAC using a key and some data.
* It doesn't modify either, and returns a new ByteArray with the HMAC value.
*/
public function compute(key:ByteArray, data:ByteArray):ByteArray {
var hashKey:ByteArray;
if (key.length>hash.getInputSize()) {
hashKey = hash.hash(key);
} else {
hashKey = new ByteArray;
hashKey.writeBytes(key);
}
while (hashKey.length<hash.getInputSize()) {
hashKey[hashKey.length]=0;
}
var innerKey:ByteArray = new ByteArray;
var outerKey:ByteArray = new ByteArray;
for (var i:uint=0;i<hashKey.length;i++) {
innerKey[i] = hashKey[i] ^ 0x36;
outerKey[i] = hashKey[i] ^ 0x5c;
}
// inner + data
innerKey.position = hashKey.length;
innerKey.writeBytes(data);
var innerHash:ByteArray = hash.hash(innerKey);
// outer + innerHash
outerKey.position = hashKey.length;
outerKey.writeBytes(innerHash);
var outerHash:ByteArray = hash.hash(outerKey);
if (bits>0 && bits<8*outerHash.length) {
outerHash.length = bits/8;
}
return outerHash;
}
public function dispose():void {
hash = null;
bits = 0;
}
public function toString():String {
return "hmac-"+(bits>0?bits+"-":"")+hash.toString();
}
}
}
这个HMAC算法加密和解密均使用ByteArray,使用时需要使用hurlant的Hex类中对应的方法转换数据类型。
引用
var hmac:HMAC = Crypto.getHMAC("hmac-128-sha224");
You can then use it as:
var value:ByteArray = hmac.compute(key, data);
<?xml version="1.0" encoding="utf-8"?>
<!--
/**
* HmacTab
*
* A UI Component that allows one to quickly test the HMAC algorithm
* made available in the AS3 Crypto library.
* Copyright (c) 2007 Henri Torgemane
*
* See LICENSE.txt for full license information.
*/
-->
<mx:Canvas xmlns:mx="http://www.**/2006/mxml" label="HMAC" width="100%" height="100%">
<mx:Label text="Hash Function:" left="10" top="10"/>
<mx:ComboBox id="hashType" labelField="@label" left="106" top="8">
<mx:dataProvider>
<mx:XMLList>
<item label="SHA-256" value="sha256"/>
<item label="SHA-224" value="sha224"/>
<item label="SHA-1" value="sha1"/>
<item label="MD5" value="md5"/>
<item label="MD2" value="md2"/>
</mx:XMLList>
</mx:dataProvider>
</mx:ComboBox>
<mx:Label x="10" y="36" text="Key Format:"/>
<mx:ComboBox id="keyFormat" labelField="@label" left="91" top="34">
<mx:dataProvider>
<mx:XMLList>
<item label="Text" value="text"/>
<item label="Hex" value="hex"/>
<item label="Base64" value="b64"/>
</mx:XMLList>
</mx:dataProvider>
</mx:ComboBox>
<mx:TextArea id="key" left="10" right="10" top="62" height="50"/>
<mx:Label text="Input Format:" left="10" top="120"/>
<mx:ComboBox id="inputFormat" labelField="@label" left="91" top="118">
<mx:dataProvider>
<mx:XMLList>
<item label="Text" value="text"/>
<item label="Hex" value="hex"/>
<item label="Base64" value="b64"/>
</mx:XMLList>
</mx:dataProvider>
</mx:ComboBox>
<mx:TextArea id="input" left="10" right="10" top="146" bottom="148"/>
<mx:Label text="Output Format:" left="10" bottom="120"/>
<mx:ComboBox id="outputFormat" labelField="@label" bottom="118" left="109" change="displayOutput()">
<mx:dataProvider>
<mx:XMLList>
<item label="Text" value="text"/>
<item label="Hex" value="hex"/>
<item label="Base64" value="b64"/>
</mx:XMLList>
</mx:dataProvider>
</mx:ComboBox>
<mx:TextArea id="output" height="100" right="10" left="10" bottom="10" editable="false"/>
<mx:Button label="Compute HMAC" right="10" click="computeHMAC()" bottom="118"/>
<mx:Script>
<![CDATA[
import com.hurlant.crypto.hash.HMAC;
import com.hurlant.util.Base64;
import com.hurlant.util.Hex;
import com.hurlant.crypto.Crypto;
import com.hurlant.crypto.hash.IHash;
private var currentResult:ByteArray;
private function computeHMAC():void {
// 1: get a IHash.
var hmac:HMAC = Crypto.getHMAC(hashType.selectedItem.@value);
// 2: get a key
var k:String = key.text;
var kdata:ByteArray;
var kformat:String = String(keyFormat.selectedItem.@value);
switch (kformat) {
case "hex": kdata = Hex.toArray(k); break;
case "b64": kdata = Base64.decodeToByteArray(k); break;
default:
kdata = Hex.toArray(Hex.fromString(k));
}
// 3: get an input
var txt:String = input.text;
var data:ByteArray;
var format:String = String(inputFormat.selectedItem.@value);
switch (format) {
case "hex": data = Hex.toArray(txt); break;
case "b64": data = Base64.decodeToByteArray(txt); break;
default:
data = Hex.toArray(Hex.fromString(txt));
}
currentResult = hmac.compute(kdata, data);
displayOutput();
}
private function displayOutput():void {
if (currentResult==null) return;
var txt:String;
var format:String = String(outputFormat.selectedItem.@value);
switch (format) {
case "hex": txt = Hex.fromArray(currentResult); break;
case "b64": txt = Base64.encodeByteArray(currentResult); break;
default:
txt = Hex.toString(Hex.fromArray(currentResult)); break;
}
trace("txt="+txt);
output.text = txt;
}
]]>
</mx:Script>
</mx:Canvas>
发表评论
-
JPEG文件格式简单分析
2011-05-04 10:54 872摘要: 这篇文章大体 ... -
什么是A记录,子域名,CNAME别名,MX记录,TXT记录,SRV 记录,泛域名(泛解析),域名转向,域名绑定
2010-12-09 15:44 904A记录QUOTE:A (Address) 记录是用来指定主机名 ... -
Salesforce CEO:Ruby是下一代云计算的语言
2010-12-09 09:27 946美国时间12月8日, ... -
聊天室程序客户端
2010-12-09 09:24 707聊天室客户端程序 Win ... -
你还在用if else吗?
2010-11-09 15:21 676软件编程牛人网 ... -
隐藏在XP中的一个秘密武器,完全清除垃圾文件
2010-11-09 15:18 765软件编程牛人网 大家用过Windows內置的磁盘清理 ... -
CMD命令行高级教程精选合编(转)
2010-11-06 16:07 1309软件编程牛人网 目 ... -
字符、字节和编码
2010-11-06 15:56 742摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解。举例 ... -
单例模式陷阱
2010-11-06 15:55 775今天去jdon,看了它的设计研究栏目,bang有几篇 ... -
实战 Firefox 扩展开发
2010-11-05 21:37 1047案例介绍 本文中所要构建的是一个能够批量下载某个 HTML ... -
TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞收藏
2010-11-05 16:40 1138软件编程牛人 这个标 ... -
病毒败于我手(一)——病毒样本的存放和管理(2010年11月1日更新)
2010-11-04 16:54 667在家上网赚钱更容易 巧妇难为无米之炊,学习击败病毒,得先有病 ...
相关推荐
其中,AS569解密芯片的应用与HMAC-SHA1算法的结合,成为了保障数据完整性和防止篡改的关键环节。本文将围绕这两个核心概念进行详细阐述。 首先,AS569是一款专为加密解密设计的芯片,常用于金融支付系统中。该芯片...
Crypto类是AS3中的一个开源库,它实现了多种加密算法,包括对称加密、非对称加密、哈希函数以及消息认证码(MAC)。这个库的主要目标是提供一套易于使用的API,让开发者能够快速集成加密功能到他们的项目中。...
MD2, MD5, SHA-1, HAVAL, Tiger, RIPE-MD160, MD5-MAC, HMAC, XOR-MAC, DES,IDEA, WAKE, 3-WAY, TEA, SAFER, Blowfish,SHARK, GOST, CAST-128, Square,Diamond2, Sapphire, RC2, RC5, RC6, MARS, SEAL, Luby-Rackoff...
在实际应用中,加密解密不仅涉及到算法选择,还包括密钥管理、完整性校验(如HMAC,Hash-based Message Authentication Code)和安全协议(如TLS/SSL)等环节。密钥的安全存储和分发是保证系统安全的关键,通常采用...
本文实例讲述了Python内置模块hashlib、hmac与uuid用法。分享给大家供大家参考,具体如下: 一、hashlib md5和sha算法通过消息摘要算法生成定长的消息摘要,消息摘要算法是不可逆的。但同一段消息通过摘要算法后得到...
"Crypto"是一个专门为AS3设计的加密类库,它提供了一系列强大的加密算法,帮助开发者实现数据的安全传输和存储。 1. **加密基础知识**:加密是将可读信息转化为不可读信息的过程,目的是保护数据不被未经授权的用户...
hmac : 不可逆键值对方式加密 hashlib模块简介: hashlib模块为不同的安全哈希/安全散列(Secure Hash Algorithm)和 信息摘要算法(Message Digest Algorithm)实现了一个公共的、通用的接口,也可以说是一个统一...
这些也是许多基于移动设备的2FA应用程序(例如和 )用于生成2FA代码的算法。 安装 通过将以下部分添加到Cargo.toml文件中,只需将库添加为依赖项Cargo.toml 。 [ dependencies . otp ] git = " ...
MD2, MD5, SHA-1, HAVAL, Tiger, RIPE-MD160, MD5-MAC, HMAC, XOR-MAC, DES, IDEA, WAKE, 3-WAY, TEA, SAFER, Blowfish, SHARK, GOST, CAST-128, Square, Diamond2, Sapphire, RC2, RC5, RC6, MARS, SEAL, Luby-...
- **简介**:`hmac` 模块提供了基于密钥的消息认证码(HMAC)算法的实现,主要用于验证数据完整性和数据源认证。 - **基本用法**: - 创建 HMAC 对象:`h = hmac.new(key, msg=None, digestmod='sha256')` - 更新 ...
python之hashlib模块:主要提供字符加密功能,python3中将md5和sha模块整合到了hashlib模块,支持md5,sha1, sha224, sha256, sha384, sha512等算法 #!/usr/bin/env python3 # -*- coding: utf-8 -*- import hashlib...
Github autoDeploymentGithub Deployment AutomationGithub为每个仓库...采用HMAC算法。 HMAC hex digest of the body, using the secret as the key当有push代码的时候,Github会POST一个请求到设置的服务器地址(Paylo
Esam模块通常有其特定的操作流程和安全协议,比如3DES加密、AES加密或HMAC算法。 5. **安全考虑**:在实际应用中,涉及Esam模块的操作必须遵循严格的协议和安全规范,以确保数据的安全性和合规性。开发者需要了解...
这里提到的token加密算法是HS256,即HMAC-SHA256,是一种广泛使用的加密算法,它结合了哈希算法和密钥生成一个消息的签名。 3. 解题者在参考了其他“大佬”的write-up(WP,即解题思路或攻略)后,意识到可以通过...
JWT中包含了身份认证必须的参数以及用户自定义的参数,JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。 【什么时候应该使用JSON Web令牌?】 授权:这是使用JWT的最常见方案。一旦用户登录...
Anubis (with optional tweak as proposed by the developers) Khazad Chaining Modes (这部分我不用,不知道怎么翻译) Modes come with a start, encrypt/decrypt and set/get IV interfaces. Mode supported....
这里我们使用了`HS256`算法,这是一种基于哈希的消息认证码(HMAC)算法,需要一个共享的密钥来验证签名。如果你想要验证一个JWT,可以这样做: ```python # 验证JWT try: decoded_payload = jwt.decode(encoded_...
Base64的算法,是通过网上共产主义获取,MD4,MD5,HMAC MD5的算法是RFC中提供的,其余的可以根据下面链接的步骤进行编写。我提供一个源代码的例子。其中arith_开头的相关算法,httppc_ntlm是 NTLM的type1、type2、...
JavaScript SHA512加密算法详细代码 /* * A JavaScript implementation of the Secure Hash Algorithm, SHA-512, as defined * in FIPS 180-2 * Version 2.2 Copyright Anonymous Contributor, Paul Johnston ...
同时,考虑到DES的安全性问题,可能还会结合其他加密算法(如HMAC)来增加额外的安全层。 总的来说,iOS中的DES加密解密涉及到CommonCrypto库的使用,理解加密算法的基本原理,以及如何在代码中正确地实施这些操作...