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 相关文章推荐
如何简单地用YUI做JavaScript动画
Mar 10 Javascript
jQuery代码优化 事件委托篇
Nov 01 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
Mar 05 Javascript
关于jQuery object and DOM element
Apr 15 Javascript
Javascript中string转date示例代码
Nov 01 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
Dec 03 Javascript
JS实现显示带倒影的图片横排居中放大展示特效实例【测试可用】
Aug 23 Javascript
vue中eventbus被多次触发以及踩过的坑
Dec 02 Javascript
webpack4.x开发环境配置详解
Aug 04 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
Nov 22 Javascript
koa router 多文件引入的方法示例
May 22 Javascript
react实现antd线上主题动态切换功能
Aug 12 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执行zip与rar解压缩方法实现代码
2010/12/05 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
PHP自带方法验证邮箱是否存在
2016/02/01 PHP
js传参数受特殊字符影响错误的解决方法
2013/10/21 Javascript
基于jQuery实现网页打印功能
2015/12/01 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
javascript数组遍历的方法实例分析
2016/09/13 Javascript
基于 Vue 的树形选择组件的示例代码
2017/08/18 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
VSCode 配置React Native开发环境的方法
2017/12/27 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
Vue利用canvas实现移动端手写板的方法
2018/05/03 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
详解ES6中的三种异步解决方案
2018/06/28 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
详解vue项目中调用百度地图API使用方法
2019/04/25 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
python实现爬取千万淘宝商品的方法
2015/06/30 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
python实现冒泡排序算法的两种方法
2018/03/10 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
学习和使用python的13个理由
2019/07/30 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
Max&Co官网:意大利年轻女性时尚品牌
2017/05/16 全球购物
大学生专业个人学习的自我评价
2013/10/26 职场文书
毕业生求职自荐信怎么写
2014/01/08 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
委托书的样本
2015/01/28 职场文书
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers