大致思路:
将字符串:0-9、a-z、A-Z,顺序打乱,为基础字符串序列(即加密的key值),
再将此基础字符串反向排序生成对应的镜像字符串,
根据传入的字符串参数,将每一个字符去取镜像字符串中对应的字符,形成新的字符串。
在线体验地址:http://djk8888.3vdo.net/ajax/jiami.html
javascript代码:
<script type="text/javascript">
//对字母和数字的参数加密和解密
function myEncodeDecode(str) {
if (str == '') {
//alert("请输入字符串!");
return;
}
//var base = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";//以这个字符串为基准
//var base = "0qQ1aA2zZ3wW4sS5xX6eE7dD8cC9rRfFvVtTgGbByYhHnNuUjJmMiIkKoOlLpP";//打乱顺序
var base = "ElZkyNW2fqguL0PKoOvpM149GYJ8Ax6Fr3c5awebCTXQUdIiBD7hRszStVmjHn";//再乱一点
var back = base.split("").reverse().join("");//将基准字符串反向排序(镜像字符串)
var strArr = str.split("");//传入的字符串转为数组
var newStr = "";
for (var i = 0; i < strArr.length; i++) {
newStr += back.substr(base.indexOf(strArr[i]), 1);//取出原字母数字[镜像位置]的字母数字
}
return newStr;
}
</script>
C#代码(前后台的基本字符串必须约定为一样的,可以将此key值配置在web.config中):
private static readonly string Encodekey = "ElZkyNW2fqguL0PKoOvpM149GYJ8Ax6Fr3c5awebCTXQUdIiBD7hRszStVmjHn"; //加密序列,注:必须和~/js/mirrorEncode.js中base值保持一致!
public static string myEncode(string str)
{
if (string.IsNullOrEmpty(str) || string.IsNullOrWhiteSpace(str)) return "";
string key = Encodekey;//加密序列
StringBuilder strBuild = new StringBuilder();
for (int i = key.Length - 1; i >= 0; i--)
{
strBuild.Append(key[i]);// 转换后返回反向了的字符串
}
string back = strBuild.ToString();//将加密序列反向排序(镜像)
List<string> strArr = new List<string>();
for (int i = 0; i < str.Length; i++)
{
strArr.Add(str.Substring(i, 1));//传入的字符串转为数组
}
var newStr = "";
for (var i = 0; i < strArr.Count; i++)
{
newStr += back.Substring(key.IndexOf(strArr[i]), 1);//取出原字母数字[镜像位置]的字母数字
}
return newStr;
}
镜像加密解密,加密和解密是同一个函数!,支持html前端(javascript)与C#后台之间相互加解密。
目前仅适合数字加字母的组合加密,写着玩的,欢迎来喷!