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 相关文章推荐
jquery 事件执行检测代码
Dec 09 Javascript
jQuery 表单验证扩展代码(二)
Oct 20 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
Aug 01 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
Aug 25 Javascript
解析jQueryEasyUI的使用
Nov 22 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
Feb 03 Javascript
JS简单获取当前年月日星期的方法示例
Feb 07 Javascript
JS自定义函数实现时间戳转换成date的方法示例
Aug 27 Javascript
vue实现城市列表选择功能
Jul 16 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
Aug 31 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
May 06 Javascript
jQuery实现广告显示和隐藏动画
Jul 04 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之变量、常量学习笔记
2008/03/27 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
jQuery实现的右下角广告窗体跟随效果示例
2016/09/16 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
详解Django通用视图中的函数包装
2015/07/21 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
python中实现栈的三种方法
2020/12/19 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
PHP中如何创建和修改数组
2012/05/02 面试题
成人大专自我鉴定范文
2013/10/19 职场文书
总监职责范文
2013/11/09 职场文书
《胡杨》教学反思
2014/02/16 职场文书
电台实习生求职信
2014/02/25 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js
MySQL慢查询优化解决问题
2022/03/17 MySQL
windows10 家庭版下FTP服务器搭建教程
2022/08/05 Servers