今天在做一个老项目时,遇到一个需求,在javascript将url中的参数加密解密,从网上找发现了这段有用的代码:

  1. <SCRIPT LANGUAGE="JavaScript">
  2. <!-- Begin
  3. function Encrypt(str, pwd) {
  4. if(str=="")return "";
  5. str = escape(str);
  6. if(!pwd || pwd==""){ var pwd="1234"; }
  7. pwd = escape(pwd);
  8. if(pwd == null || pwd.length <= 0) {
  9. alert("Please enter a password with which to encrypt the message.");
  10. return null;
  11. }
  12. var prand = "";
  13. for(var I=0; I<pwd.length; I++) {
  14. prand += pwd.charCodeAt(I).toString();
  15. }
  16. var sPos = Math.floor(prand.length / 5);
  17. var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos*2) + prand.charAt(sPos*3) + prand.charAt(sPos*4) + prand.charAt(sPos*5));
  18. var incr = Math.ceil(pwd.length / 2);
  19. var modu = Math.pow(2, 31) - 1;
  20. if(mult < 2) {
  21. alert("Algorithm cannot find a suitable hash. Please choose a different password. /nPossible considerations are to choose a more complex or longer password.");
  22. return null;
  23. }
  24. var salt = Math.round(Math.random() * 1000000000) % 100000000;
  25. prand += salt;
  26. while(prand.length > 10) {
  27. prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
  28. }
  29. prand = (mult * prand + incr) % modu;
  30. var enc_chr = "";
  31. var enc_str = "";
  32. for(var I=0; I<str.length; I++) {
  33. enc_chr = parseInt(str.charCodeAt(I) ^ Math.floor((prand / modu) * 255));
  34. if(enc_chr < 16) {
  35. enc_str += "0" + enc_chr.toString(16);
  36. }else
  37. enc_str += enc_chr.toString(16);
  38. prand = (mult * prand + incr) % modu;
  39. }
  40. salt = salt.toString(16);
  41. while(salt.length < 8)salt = "0" + salt;
  42. enc_str += salt;
  43. return enc_str;
  44. }
  45. function Decrypt(str, pwd) {
  46. if(str=="")return "";
  47. if(!pwd || pwd==""){ var pwd="1234"; }
  48. pwd = escape(pwd);
  49. if(str == null || str.length < 8) {
  50. alert("A salt value could not be extracted from the encrypted message because it's length is too short. The message cannot be decrypted.");
  51. return;
  52. }
  53. if(pwd == null || pwd.length <= 0) {
  54. alert("Please enter a password with which to decrypt the message.");
  55. return;
  56. }
  57. var prand = "";
  58. for(var I=0; I<pwd.length; I++) {
  59. prand += pwd.charCodeAt(I).toString();
  60. }
  61. var sPos = Math.floor(prand.length / 5);
  62. var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos*2) + prand.charAt(sPos*3) + prand.charAt(sPos*4) + prand.charAt(sPos*5));
  63. var incr = Math.round(pwd.length / 2);
  64. var modu = Math.pow(2, 31) - 1;
  65. var salt = parseInt(str.substring(str.length - 8, str.length), 16);
  66. str = str.substring(0, str.length - 8);
  67. prand += salt;
  68. while(prand.length > 10) {
  69. prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
  70. }
  71. prand = (mult * prand + incr) % modu;
  72. var enc_chr = "";
  73. var enc_str = "";
  74. for(var I=0; I<str.length; I+=2) {
  75. enc_chr = parseInt(parseInt(str.substring(I, I+2), 16) ^ Math.floor((prand / modu) * 255));
  76. enc_str += String.fromCharCode(enc_chr);
  77. prand = (mult * prand + incr) % modu;
  78. }
  79. return unescape(enc_str);
  80. }
  81. //  End -->
  82. </script>

以后碰到加密解密问题,直接将上述代码写成一个js文件,就搞定。省事了。。。。

一段有用的javascript加密解密的更多相关文章

  1. JavaScript加密解密7种方法总结分析

    原文地址:http://wenku.baidu.com/view/9048edee9e31433239689357.html 本文一共介绍了七种javascript加密方法: 在做网页时(其实是网页木 ...

  2. JavaScript加密解密7种方法

    注:本文纯转贴,供学习使用 本文一共介绍了七种javascript加密方法: 在做网页时(其实是网页木马呵呵),最让人烦恼的是自己辛辛苦苦写出来的客户端IE运行的javascript代码常常被别人轻易 ...

  3. 通用RSA加密 - PHP+Java+Javascript加密解密

    php端生成 公钥私钥 1.openssl genrsa -out rsa_private_key.pem 1024    私钥 2.openssl rsa -in rsa_private_key.p ...

  4. 30段有用的javascript代码

    1. 如何区分IE及非IE浏览器 if(!+[1,]){ console.log("这是IE浏览器"): } else{ console.log("这不是IE浏览器&qu ...

  5. JavaScript加密解密压缩工具

    <script> a=62; function encode() { var code = document.getElementById('code').value; code = co ...

  6. 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输

    Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...

  7. JAVASCRIPT加密方法,JS加密解密综述(7种)

    一:最简单的加密解密 对于JAVASCRIPT函数escape()和unescape()想必是比较了解啦(很多网页加密在用它们),分别是编码和解码字符串,比如例子代码 用escape()函数加密后变为 ...

  8. C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]

    原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...

  9. Javascript实现base64的加密解密【转】

    场景 这几天使用PHP向前端传值的时候,遇到一个问题,要将代码传过去赋值.如果使用urlencode()和urldecode()函数,就会出现js无法解码的情况,因为php和js的相关函数算法不一致. ...

随机推荐

  1. webdriver API study

    This chapter cover all the interfaces of Selenium WebDriver. Recommended Import Style The API defini ...

  2. Linux时间子系统(十四) tick broadcast framework

    一.前言 在内核中,有cpuidle framework可以控制cpu的节电:当没有进程调度到该cpu上执行的时候,swapper进程粉墨登场,将该cpu会被推入到idle状态.当然CPU的idle状 ...

  3. 使用Apktools反编译apk应用

    使用Apktools反编译apk应用 1.获取APK的classes.dex文件: 得到你想要的应用的apk文件,用解压软件打开apk,从apk中复制出classes.dex文件. 2.classes ...

  4. ucosii事件控制块------消息邮箱与消息队列

    UCOSII 使用叫做事件控制块(ECB)的数据结构来描述诸如信号量.邮箱(消息邮箱)和消息队列这些事件 #define OS_EVENT_EN (((OS_Q_EN > 0u) &&a ...

  5. eclipse逆向生成实体类注解方式或者xml方式

    转载自:http://www.2cto.com/database/201501/372023.html http://blog.csdn.net/wangpeng047/article/details ...

  6. HTML - SELECT默认选中

    除了在option中定义属性selected = "selected",还可以 <select defaultValue='2'> <option value=& ...

  7. QT4编程过程中遇到的问题及解决办法

    1.QLineEdit显示内容的格式函数: QLineEdit *lineEditPassword = new QLineEdit: lineEditPassword -> setEchoMod ...

  8. MongoDB add sharding -- Just a note

    1. Configure Configuration Server. 1.1. Create a directory: e.g. C:\data\dbs\config 1.2. Start confi ...

  9. android笔记一 控件属性

    <?xml version = "1.0" encoding = "utf-8"?> <LinearLayout xmlns:android= ...

  10. eclipse中maven项目部署到tomcat [转]

    其实maven项目部署到tomcat的方式很多,我从一开始的打war包到tomcat/webapps目录,到使用tomcat-maven插件,到直接使用servers部署,一路来走过很多弯路. 下面就 ...