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 相关文章推荐
字符串的replace方法应用浅析
Dec 06 Javascript
批量实现面向对象的实例代码
Jul 01 Javascript
使用Jquery实现点击文字后变成文本框且可修改
Sep 21 Javascript
js点击事件链接的问题解决
Apr 25 Javascript
C#中使用迭代器处理等待任务
Jul 13 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
May 24 Javascript
微信小程序 实战小程序实例
Oct 08 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
Nov 10 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Dec 15 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
Apr 11 jQuery
JavaScript实现音乐自动切换和轮播
Nov 05 Javascript
深入浅析Vue中的slots/scoped slots
Apr 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函数学习之PHP函数点评
2012/07/05 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
培养自己的php编码规范
2015/09/28 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
js判断变量是否空值的代码
2008/10/26 Javascript
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
JQuery将文本转化成JSON对象需要注意的问题
2011/05/09 Javascript
JavaScript常用全局属性与方法记录积累
2013/07/03 Javascript
jQuery extend 的简单实例
2013/09/18 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
js HTML5上传示例代码完整版
2016/10/10 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
2016/12/08 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
vue绑定的点击事件阻止冒泡的实例
2018/02/08 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
微信小程序返回上一页传参并刷新过程解析
2019/12/13 Javascript
Python 3中print函数的使用方法总结
2017/08/08 Python
Django权限机制实现代码详解
2018/02/05 Python
python flask实现分页的示例代码
2018/08/02 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
Python jieba库用法及实例解析
2019/11/04 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
一款基于css3麻将筛子3D翻转特效的实例教程
2014/12/31 HTML / CSS
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
数据库基础的一些面试题
2012/02/25 面试题
开业典礼主持词
2014/03/21 职场文书
倡议书格式范文
2014/04/14 职场文书
教师求职信范文
2014/05/24 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书