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_01_理解内存分配原理分析
Oct 11 Javascript
了解一点js的Eval函数
Jul 26 Javascript
express文件上传中间件Multer详解
Oct 24 Javascript
JS中with的替代方法与String中的正则方法详解
Dec 23 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
Mar 14 Javascript
jquery 校验中国身份证号码实例详解
Apr 11 jQuery
浅谈Node异步编程的机制
Oct 18 Javascript
vue实现验证码输入框组件
Dec 14 Javascript
让你5分钟掌握9个JavaScript小技巧
Jun 09 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
Jul 24 Javascript
vue项目中实现图片预览的公用组件功能
Oct 26 Javascript
vuex 中插件的编写案例解析
Jun 10 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下实现一个阿拉伯数字转中文数字的函数
2008/07/10 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
网页的分页下标生成代码(PHP后端方法)
2016/02/03 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
解读IE和firefox下JScript和HREF的执行顺序
2008/01/12 Javascript
javascript中的array数组使用技巧
2010/01/31 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
JS搜狐面试题分析
2016/12/16 Javascript
vue.js加载新的内容(实例代码)
2017/06/01 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
2020/07/22 Javascript
Python urlopen()函数 示例分享
2014/06/12 Python
详解在Python和IPython中使用Docker
2015/04/28 Python
Python 多进程并发操作中进程池Pool的实例
2017/11/01 Python
pytorch permute维度转换方法
2018/12/14 Python
NumPy 数组使用大全
2019/04/25 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
在cmd中查看python的安装路径方法
2019/07/03 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
美国钻石商店:Zales
2016/11/20 全球购物
中科软笔试题和面试题
2014/10/07 面试题
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
办公室内勤岗位职责范本
2013/12/09 职场文书
会议接待欢迎词
2014/01/12 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
平安建设汇报材料
2014/12/29 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python