查看: 427|回复: 0

[JavaScript/JQuery] 细说CryptoJs使用(微信小程序加密解密)

发表于 2018-4-7 08:00:02

前言
CryptoJs是google推出的一款前段解密类库.功能强大,包含很多的前段解密算法.

一.google下载地址:
二次开发版本
google原版地址
二.常用方法

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  6. <title>Testing websockets</title>
  7. <script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
  8. <!-- <script src="crypto-js.js"></script> -->
  9. <script src="tripledes.js"></script>
  10. <script type="text/javascript">
  11. var key = 'BOTWAVEE';
  12. //CBC模式加密 utf8 to base64
  13. function encryptByDESModeCBCUtf8to64(message,key,iv) {
  14. //var message=CryptoJS.enc.Utf8.parse(message);
  15. var keyHex = CryptoJS.enc.Utf8.parse(key);
  16. var ivHex = CryptoJS.enc.Utf8.parse(iv);
  17. encrypted = CryptoJS.DES.encrypt(message, keyHex, {
  18. iv:ivHex,
  19. mode: CryptoJS.mode.CBC,
  20. padding:CryptoJS.pad.Pkcs7
  21. // padding:CryptoJS.pad.Pkcs7
  22. }
  23. );
  24. //加密 成Base64
  25. return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
  26. }
  27. function encryptByDESModeCBCUtf8to(message,key,iv) {
  28. var message=CryptoJS.enc.Utf8.parse(message);
  29. var keyHex = CryptoJS.enc.Utf8.parse(key);
  30. var ivHex = CryptoJS.enc.Utf8.parse(iv);
  31. encrypted = CryptoJS.DES.encrypt(message, keyHex, {
  32. iv:ivHex,
  33. mode: CryptoJS.mode.CBC,
  34. padding:CryptoJS.pad.Pkcs7
  35. }
  36. );
  37. //加密 成Base64
  38. return encrypted.ciphertext.toString();
  39. // CryptoJS.enc.Base64
  40. }
  41. //CBC模式解密
  42. function decryptByDESModeCBC(ciphertext2,key,iv) {
  43. var keyHex = CryptoJS.enc.Utf8.parse(key);
  44. var ivHex = CryptoJS.enc.Utf8.parse(iv);
  45. // CryptoJS.enc.Base64.parse(
  46. // direct decrypt ciphertext
  47. var decrypted = CryptoJS.DES.decrypt({
  48. ciphertext: CryptoJS.enc.Base64.parse(ciphertext2)
  49. }, keyHex, {
  50. iv:ivHex,
  51. mode: CryptoJS.mode.CBC,
  52. padding: CryptoJS.pad.Pkcs7
  53. });
  54. return decrypted.toString(CryptoJS.enc.Utf8);
  55. }
  56. //CBC模式解密
  57. function decryptByDESModeCBCHex(ciphertext2,key,iv) {
  58. var keyHex = CryptoJS.enc.Utf8.parse(key);
  59. var ivHex = CryptoJS.enc.Utf8.parse(iv);
  60. // direct decrypt ciphertext
  61. var decrypted = CryptoJS.DES.decrypt({
  62. ciphertext: CryptoJS.enc.Hex.parse(ciphertext2)
  63. }, keyHex, {
  64. iv:ivHex,
  65. mode: CryptoJS.mode.CBC,
  66. padding: CryptoJS.pad.Pkcs7
  67. });
  68. return decrypted.toString(CryptoJS.enc.Utf8);
  69. }
  70. //DES ECB模式加密
  71. function encryptByDESModeEBC(message){
  72. var keyHex = CryptoJS.enc.Utf8.parse(key);
  73. var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
  74. mode: CryptoJS.mode.ECB,
  75. padding: CryptoJS.pad.Pkcs7
  76. });
  77. return encrypted.ciphertext.toString();
  78. }
  79. //DES ECB模式解密
  80. function decryptByDESModeEBC(ciphertext){
  81. var keyHex = CryptoJS.enc.Utf8.parse(key);
  82. var decrypted = CryptoJS.DES.decrypt({
  83. ciphertext: CryptoJS.enc.Hex.parse(ciphertext)
  84. }, keyHex, {
  85. mode: CryptoJS.mode.ECB,
  86. padding: CryptoJS.pad.Pkcs7
  87. });
  88. var result_value = decrypted.toString(CryptoJS.enc.Utf8);
  89. return result_value;
  90. }
  91. function test0(){
  92. var source = $("#source").val();
  93. // CryptoJS.enc.Utf8.parse(
  94. var cc = encryptByDESModeCBCUtf8to(source,"rrettre","234234234");
  95. $("#target").val(cc);
  96. }
  97. function test(){
  98. var source = $("#source").val();
  99. // CryptoJS.enc.Utf8.parse(
  100. var cc = encryptByDESModeCBCUtf8to64(source,"rrettre","234234234");
  101. $("#target").val(cc);
  102. }
  103. function test1(){
  104. var source = $("#sourceS").val();
  105. var dd = decryptByDESModeCBC(source,"rrettre","234234234");
  106. $("#jiemi").val(dd);
  107. }
  108. function test2(){
  109. var source = $("#sourceS").val();
  110. var dd = decryptByDESModeCBCHex(source,"rrettre","234234234");
  111. $("#jiemi").val(dd);
  112. }
  113. </script>
  114. </head>
  115. <body>
  116. <div>
  117. 加密前:<textarea id="source" value="" style="width:500px;height:90px;" /></textarea>
  118. <hr>
  119. 加密后:<textarea id="target" value="" style="width:500px;height:90px;" ></textarea>
  120. <hr>
  121. <input type="button" onclick="test();" name="" value="加密" />
  122. <input type="button" onclick="test0();" name="" value="加密" />
  123. <hr>
  124. 密文:<textarea id="sourceS" value="" width="400px" style="width:500px;height:90px;" ></textarea>
  125. <hr>
  126. 解密后:<textarea id="jiemi" value="" style="width:500px;height:90px;" ></textarea>
  127. <hr>
  128. <input type="button" onclick="test1();" name="" value="解密"/>
  129. <input type="button" onclick="test2();" name="" value="解密Hex"/>
  130. </div>
  131. </body>
  132. </html>
复制代码

三.心得体会
1.google版本的源码,可以选择一种解密方式的文件,非常适合对解密文件大小有限制的项目.
细说CryptoJs使用(微信小程序加密解密)
2.二次开发版本,有全量包,跟google的使用方式相同.
四.微信小程序使用CryptoJs.
微信小程序引用类库文件,需要将对象 以module.export的形式,或其他小程序支持的形式输出,才能正常使用.
例如一下方式:
细说CryptoJs使用(微信小程序加密解密)



回复

使用道具 举报