我们很难想象用户在什么样的网络环境使用我们开发的应用,如果用户所处的网络环境不是一个可信任的环境,那么用户的账户安全就可能有威胁,比如用户登陆时提交的账号密码被网络嗅探器窃取;客户端加密数据能有效的防御网络嗅探器窃取数据,通过在客户端Javascript加密数据后再提交至服务端进行验证有效提高了系统的安全系数,这符合纵深防御原则和数据安全要素机密性;本文整理了两种常用的加密算法:md5和sha1;
加密算法封装HashEncrypt对象中,包含MD5、SHA1两个方法和HashFormat属性,此外还扩展了系统的String类型,为其实例添加了md5和sha1方法;
HashFormat:输出格式枚举,是object类型,静态结构:{ Base64: "Base64", Hex: "Hex", String: "String" }
MD5方法
HashEncrypt.MD5(string,ascii,hexUpperCase )
string 类型:string ,要需要加密的内容,必须的
ascii 类型:bool,可选的,是否以ASCII字符编码加密,默认是Unicode
hexUpperCase 类型:bool,可选的,输出的十六进制编码是否为大写
HashEncrypt.MD5(string,base64Pad,ascii )
string 类型:string ,要需要加密的内容
ascii 类型:bool,是否以ASCII字符编码加密,默认是Unicode
base64Pad 类型:string,输出base64的填充字符默认是"=",如果设置这个参数为字符串那么输出格式默认是base64编码。
HashEncrypt.MD5(string,hexUpperCase)
string 类型:string ,要需要加密的内容
hexUpperCase 类型:number,1表示输出的十六进制编码为大写;
HashEncrypt.MD5(string,options)
string 类型:string ,要需要加密的内容
options 类型:object,加密的参数选项;
options属性说明:
ascii 类型:bool,是否以ASCII字符编码加密,默认是Unicode
base64 类型:string,输出base64的填充字符默认是"=",如果设置这个参数为字符串那么输出格式默认是base64编码。
hexUpperCase 类型:bool,输出的十六进制编码是否为大写
format 类型:HashEncrypt.HashFormat枚举类型,表示密文的输出格式,可选值有:
"Base64" base64编码格式 、 "Hex"十六进制编码格式、 "String"直接转换字符串格式;
hmacKey 类型:string,可选的,使用 MD5 哈希函数计算基于哈希值的消息验证代码 (HMAC),
此 HMAC 进程将密钥与消息数据混合,使用哈希函数对混合结果进行哈希计算,将所得哈希值与该密钥混合,然后再次应用哈希函数。输出的哈希值长度为 128 位。
示例:
<script>
var data = HashEncrypt.MD5("hello world!",false,false);
//"hello world!".md5(false,false) //这行代码上面的效果是同样的结果
document.write(data);
</script>
输出结果:99da75326ffaf6acc0debe844b359894
SHA1方法
这个方法的签名和MD5方法的完全一致的,在这里就不重述了,哈哈哈。。
源码和方法演示
http://files.cnblogs.com/Jackson-Bruce/%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%93%88%E5%B8%8C%E5%8A%A0%E5%AF%86.zip
发布版
http://files.cnblogs.com/Jackson-Bruce/HashEncrypt.min.js
http://pajhome.org.uk/crypt/md5