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写的一个自定义弹出式对话框代码
Jan 17 Javascript
JavaScript prototype对象的属性说明
Mar 13 Javascript
有趣的javascript数组定义方法
Sep 10 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
Apr 25 Javascript
JavaScript常用脚本汇总(二)
Mar 04 Javascript
jQuery zTree加载树形菜单功能
Feb 25 Javascript
Bootstrap登陆注册页面开发教程
Jul 12 Javascript
jQuery检查元素存在性(推荐)
Sep 17 Javascript
微信小程序 开发之快递查询功能的实现
Jan 09 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
Jun 05 Javascript
node.js操作MongoDB的实例详解
Oct 11 Javascript
AngularJS基于MVC的复杂操作实例讲解
Dec 31 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
玩转虚拟域名◎+ .
2006/10/09 PHP
简体中文转换为繁体中文的PHP函数
2006/10/09 PHP
基于PHP array数组的教程详解
2013/06/05 PHP
解析PHP中$_FILES的使用以及注意事项
2013/07/05 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
PHP JSON格式的中文显示问题解决方法
2015/04/09 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
JS表单数据验证的正则表达式(常用)
2017/02/18 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
ES6 class的应用实例分析
2019/06/27 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
详解使用WebPack搭建React开发环境
2019/08/06 Javascript
jQuery实现简单日历效果
2020/07/05 jQuery
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
[38:39]KG vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python科学计算之Pandas详解
2017/01/15 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
python print出共轭复数的方法详解
2019/06/25 Python
基于python操作ES实例详解
2019/11/16 Python
python生成任意频率正弦波方式
2020/02/25 Python
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
JAVA和C++区别都有哪些
2015/03/30 面试题
指导教师评语
2014/04/26 职场文书
标准离婚协议书(2014版)
2014/10/05 职场文书
部门2014年度工作总结
2014/11/12 职场文书
使用JS实现简易计算器
2021/06/14 Javascript
利用 JavaScript 构建命令行应用
2021/11/17 Javascript