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 相关文章推荐
多浏览器支持的右下角浮动窗口
Apr 01 Javascript
JS中confirm,alert,prompt函数区别分析
Jan 17 Javascript
javascript学习笔记(三) String 字符串类型介绍
Jun 19 Javascript
jQuery Tools Dateinput使用介绍
Jul 14 Javascript
javascript中的self和this用法小结
Feb 08 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
Dec 08 Javascript
JS验证逗号隔开可以是中文字母数字
Apr 22 Javascript
基于webpack.config.js 参数详解
Mar 20 Javascript
详解在React里使用&quot;Vuex&quot;
Apr 02 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
May 10 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
Aug 19 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
Sep 02 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
德生S2000电路分析
2021/03/02 无线电
使用PHP模拟HTTP认证
2006/10/09 PHP
一个简易需要注册的留言版程序
2006/10/09 PHP
用php或asp创建网页桌面快捷方式的代码
2010/03/23 PHP
php后台多用户权限组思路与实现程序代码分享
2012/02/13 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
JavaScript DOM基础
2015/04/13 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
Python struct模块解析
2014/06/12 Python
pycharm安装和首次使用教程
2018/08/27 Python
python调用百度REST API实现语音识别
2018/08/30 Python
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
python导入坐标点的具体操作
2019/05/10 Python
python3.6编写的单元测试示例
2019/08/17 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
导致python中import错误的原因是什么
2020/07/01 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
2020/11/22 Python
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
本科生个人求职自荐信
2013/09/26 职场文书
聊聊golang中多个defer的执行顺序
2021/05/08 Golang