加密
//str 是想加密的字符串
//pwd 是key
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. Possible 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;
}
分享到:
相关推荐
java和javascript加密解密,可相互加密解密,内含javascript代码和java代码,解压即用,自定义密钥
JavaScript写的DES加密解密的代码,运行模式为CBC,纯源码觉得可以运行。加密前:select item_no,item_name,price,sale_price from t_bd_item_info where item_no='00002', 加密后:V+WKfe9+DcuPpwU7mJ8krkgpztgU7...
javascript DES加密解密算法
javascript前端DES加密,VB.NET、C#后端服务器解密,经常用在账号密码验证的界面,避免用户凭据明文传输
因项目需要,要用js加密后,提交给C#解密,在网上找了半天,无数个版本,却不能互相使用 就随便下载了一个JS版本的,把它改写成C#版本的 这样JS加密后,C#也能解密 反之C#加密后,JS也能解密 共享给大家吧。 注:...
本算法基于网上javascript des和3des加密解密算法修改,实现了与标准java des和3des加密解密算法的互操作。
实现使用3des在页面js加密,后台java解密
js做的des加解密实例 挺实用的,根据自己的需要改改
3des加密解密 base64编码解码的源代码 完全与标准算法一致,与C# java 结果一致
Java,android,ios通过DES加密和解密获得相同的结果。 DES算法:CBC操作:(android)PKCS5Padding(ios)kCCOptionPKCS7Padding 入门 添加依赖 dependencies : flutter_des : ^2.0.0 # latest version 例子 ...
Java 加密解密之对称加密算法DES.doc
DES加密/解密算法的实现 快照: 首页 创建密钥 加密和解密 雪崩效应
做的时候发现VB.net带的DES加密算法和我PHP里的不一样,PHP已经是成型产品,不能修改,于是就把PHP里的加密算法翻译了一遍。一天一夜,真不容易。主要问题出在PHP里在做位运算的时候截断数据,搞的我VB.net里费了好...
使用详情看博客: https://blog.csdn.net/bob_Xing_Yang/article/details/80417383
该示例含有Java版和JavaScript版的Des加密解密过程,基于JDK8. csdn好像改版了,不能免资源分,所以设为最低2分吧。第一次上传^_^
使用DESCryptoServiceProvider.CreateDecryptor,并确保您传递与传递给Javascript实现相同的密钥和IV。 然后检查是否已将返回的DES对象的Mode和Padding属性设置为相同。 作者声称JS实现是兼容的...
因为时间关系,没有去深究加密代码,就随便下载了一个JS版本的, 并把它改写成C#版本的 这样JS加密后的结果,C#也能解密 反之C#加密后的结果,JS也能解密 我把它发出来给大家共享吧 注:源代码是VS.Net2008版本创建...
主要介绍了JS实现的3des+base64加密解密算法,结合完整实例形式分析了JavaScript实现的3des+base64加密解密算法简单使用技巧,需要的朋友可以参考下