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 相关文章推荐
Javascript实现的分页函数
Dec 22 Javascript
jquery ajax abort()的使用方法
Oct 28 Javascript
JS图像无缝滚动脚本非常好用
Feb 10 Javascript
详解js中class的多种函数封装方法
Jan 03 Javascript
深入理解JS中的Function.prototype.bind()方法
Oct 11 Javascript
JS定时器用法分析【时钟与菜单中的应用】
Dec 21 Javascript
详谈angularjs中路由页面强制更新的问题
Apr 24 Javascript
JS字符串按逗号和回车分隔的方法
Apr 25 Javascript
微信小程序日期时间选择器使用方法
Feb 01 Javascript
vue组件中的数据传递方法
May 14 Javascript
js+html5 canvas实现ps钢笔抠图
Apr 28 Javascript
jQuery子选择器与可见性选择器实例分析
Jun 28 jQuery
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数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
2012/08/22 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
jQuery html()等方法介绍
2009/11/18 Javascript
js控制CSS样式属性语法对照表
2012/12/11 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
jQuery中DOM操作实例分析
2015/01/23 Javascript
js实现仿Discuz文本框弹出层效果
2015/08/13 Javascript
利用JS实现简单的瀑布流加载图片效果
2017/04/22 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
2019/05/21 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
创建与框架无关的JavaScript插件
2020/12/01 Javascript
Python的subprocess模块总结
2014/11/07 Python
python3中的md5加密实例
2018/05/29 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
python实现智能语音天气预报
2019/12/02 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
2014年小学少先队工作总结
2014/12/18 职场文书
水知道答案观后感
2015/06/08 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
工作服管理制度范本
2015/08/06 职场文书
大学生十八大感想
2015/08/11 职场文书
Nginx禁止ip访问或非法域名访问
2022/04/07 Servers
Golang日志包的使用
2022/04/20 Golang