js加密解密字符串可自定义密码因子


Posted in Javascript onMay 13, 2014
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<title>字符串加密</title> 
</head> 
<body> 
<SCRIPT LANGUAGE="JavaScript"> 
<!-- Begin 
function encrypt(str, pwd) { 
if(pwd == null || pwd.length <= 0) { 
alert("Please enter a password with which to encrypt the message."); 
return null; 
} 
var prand = ""; 
for(var i=0; i<pwd.length; i++) { 
prand += pwd.charCodeAt(i).toString(); 
} 
var sPos = Math.floor(prand.length / 5); 
var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos*2) + prand.charAt(sPos*3) + prand.charAt(sPos*4) + prand.charAt(sPos*5)); 
var incr = Math.ceil(pwd.length / 2); 
var modu = Math.pow(2, 31) - 1; 
if(mult < 2) { 
alert("Algorithm cannot find a suitable hash. Please choose a different password. \nPossible considerations are to choose a more complex or longer password."); 
return null; 
} 
var salt = Math.round(Math.random() * 1000000000) % 100000000; 
prand += salt; 
while(prand.length > 10) { 
prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString(); 
} 
prand = (mult * prand + incr) % modu; 
var enc_chr = ""; 
var enc_str = ""; 
for(var i=0; i<str.length; i++) { 
enc_chr = parseInt(str.charCodeAt(i) ^ Math.floor((prand / modu) * 255)); 
if(enc_chr < 16) { 
enc_str += "0" + enc_chr.toString(16); 
} else enc_str += enc_chr.toString(16); 
prand = (mult * prand + incr) % modu; 
} 
salt = salt.toString(16); 
while(salt.length < 8)salt = "0" + salt; 
enc_str += salt; 
return enc_str; 
} function decrypt(str, pwd) { 
if(str == null || str.length < 8) { 
alert("A salt value could not be extracted from the encrypted message because it's length is too short. The message cannot be decrypted."); 
return; 
} 
if(pwd == null || pwd.length <= 0) { 
alert("Please enter a password with which to decrypt the message."); 
return; 
} 
var prand = ""; 
for(var i=0; i<pwd.length; i++) { 
prand += pwd.charCodeAt(i).toString(); 
} 
var sPos = Math.floor(prand.length / 5); 
var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos*2) + prand.charAt(sPos*3) + prand.charAt(sPos*4) + prand.charAt(sPos*5)); 
var incr = Math.round(pwd.length / 2); 
var modu = Math.pow(2, 31) - 1; 
var salt = parseInt(str.substring(str.length - 8, str.length), 16); 
str = str.substring(0, str.length - 8); 
prand += salt; 
while(prand.length > 10) { 
prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString(); 
} 
prand = (mult * prand + incr) % modu; 
var enc_chr = ""; 
var enc_str = ""; 
for(var i=0; i<str.length; i+=2) { 
enc_chr = parseInt(parseInt(str.substring(i, i+2), 16) ^ Math.floor((prand / modu) * 255)); 
enc_str += String.fromCharCode(enc_chr); 
prand = (mult * prand + incr) % modu; 
} 
return enc_str; 
} 
// End --> 
</script> 
<form name="box"><center> 
<table cellpadding=0 cellspacing=0 border=0><tr><td colspan=3> 
<textarea cols=40 rows=5 wrap=virtual name=ipt>Welcome to baidu.com</textarea> 
</td></tr> 
<tr height=50><td valign="top"> 
<input type="button" onclick="document.box.opt.value= encrypt(document.box.ipt.value, document.box.pwd.value);" value="加密"> 
</td><td align="center" valign="center"> 
<input type="text" name="pwd" value="password"> 
</td><td align="right" valign="bottom"> 
<input type="button" onclick="document.box.ipt.value= decrypt(document.box.opt.value, document.box.pwd.value);" value="解密"> 
</td></tr> 
<tr><td colspan=3> 
<textarea cols=40 rows=5 wrap=virtual name=opt></textarea> 
</td></tr></table> 
</center> 
</form> 
</body> 
</html>

代码copy之后直接打开即可
Javascript 相关文章推荐
Extjs学习笔记之八 继承和事件基础
Jan 08 Javascript
文字不间断滚动(上下左右)实例代码
Apr 21 Javascript
浅析javascript中的DOM
Mar 01 Javascript
jquery+ajax实现直接提交表单实例分析
Jun 17 Javascript
JS中with的替代方法与String中的正则方法详解
Dec 23 Javascript
Bootstrap缩略图与警告框学习使用
Feb 08 Javascript
详解在Vue中有条件地使用CSS类
Sep 30 Javascript
jqgrid实现简单的单行编辑功能
Sep 30 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
Aug 15 Javascript
小程序分页实践之编写可复用分页组件
Jul 18 Javascript
JavaScript:ES2019 的新特性(译)
Aug 08 Javascript
JavaScript创建、读取和删除cookie
Sep 03 Javascript
JavaScript用Number方法实现string转int
May 13 #Javascript
javascript中expression的用法整理
May 13 #Javascript
JS函数重载的解决方案
May 13 #Javascript
一个JS函数搞定网页标题(title)闪动效果
May 13 #Javascript
JS获得浏览器版本和操作系统版本的例子
May 13 #Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
May 13 #Javascript
js语法学习之判断一个对象是否为数组
May 13 #Javascript
You might like
PHP中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
destoon利用Rewrite规则设置网站安全
2014/06/21 PHP
php socket实现的聊天室代码分享
2014/08/16 PHP
php+mysql实现无限级分类
2015/11/11 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
2016/10/04 Javascript
通过构造函数实例化对象的方法
2017/06/28 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
2020/06/07 Javascript
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
Python sorted对list和dict排序
2020/06/09 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
经济学人订阅:The Economist
2018/07/19 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
金融专业个人的自我评价
2013/10/18 职场文书
积极贯彻学习两会精神总结
2014/03/17 职场文书
承诺书的格式范文
2014/03/28 职场文书
煤矿安全协议书
2014/08/20 职场文书
社会实践的活动方案
2014/08/22 职场文书
关于开学的感想
2015/08/10 职场文书
生活小常识广播稿
2015/08/19 职场文书