10. Javascript 前後端數據加密

来源:https://www.cnblogs.com/xiaole9924/archive/2019/11/20/11897885.html
-Advertisement-
Play Games

為了加強項目的介面安全程度,需求如下 1 var options = { 2 // 前端需要傳送的數據加密 3 data: { 4 abc: 123, 5 bcd: 123, 6 cds: '撒旦教付貨款12313', 7 }, 8 // 模擬後端返回base64碼 9 key: 'NWxCZUZ3 ...


為了加強項目的介面安全程度,需求如下

 1         var options = {
 2             // 前端需要傳送的數據加密
 3             data: {
 4                 abc: 123,
 5                 bcd: 123,
 6                 cds: '撒旦教付貨款12313',
 7             },
 8             // 模擬後端返回base64碼
 9             key: 'NWxCZUZ3YWlE'
10         }
11         var test = function (option) {
12             //定義時添加VAR表示是私有屬性 內部使用
13             var data = option.data; // 前端傳送的數據
14             var key = option.key; // base64
15             //  前端對數據做ascii碼排序
16             var sort_ASCII = function (obj) {
17                 if (obj == null) return '';
18                 var arr = new Array();
19                 var num = 0;
20                 for (var i in obj) {
21                     arr[num] = i;
22                     num++;
23                 }
24                 var sortArr = arr.sort();
25                 var sortObj = {};
26                 for (var i in sortArr) {
27                     sortObj[sortArr[i]] = obj[sortArr[i]];
28                 }
29                 return sortObj;
30             }
31             // 對象封裝 將data轉譯成字元串
32             var changeUrl = function (obj) {
33                 if (obj == null) return '';
34                 var str = ""
35                 var n = 0;
36                 Object.keys(sort_ASCII(obj)).forEach(key => {
37                     // if (!isNaN(obj[key])) {
38                     //     str += (n ? '&' : '') + key + '=' + obj[key];
39                     //     n++
40                     // }
41                     if (!/.*[\u4e00-\u9fa5]+.*$/.test(obj[key])) {
42                         str += (n ? '&' : '') + key + '=' + obj[key];
43                         n++
44                     }
45                 })
46                 return str
47             }
48             //  字元串與位異或封裝
49             var stringToChars = function (_s, _num) {
50                 var _r = "";
51                 for (var i = 0; i < _s.length; i++) {
52                     _r += String.fromCharCode(_s.charCodeAt(i) ^ _num);
53                 }
54                 return _r.trim().replace(/\s/g, "");
55             }
56             // 封裝內部計算方式
57             var remainder = function (str) {
58                 var num = Math.pow(2, str.length % 3 + 1);
59                 return stringToChars(changeUrl(data), num)
60             }
61             // 方法前加this表示公共方法 可以在外部訪問
62             // 獲取前後端密鑰
63             this.getSignature = function () {
64                 var code = stringToChars(key, 2)
65                 var n = Math.pow(2, code.length % 3);
66                 code = stringToChars(md5(code), n)
67                 // md5加密前後密鑰
68                 return md5(remainder(changeUrl(data)) + code)
69             }
70         }
71         var t = new test(options);
72         // 生成最後的簽名
73         console.log(t.getSignature());        

 

版權聲明:本文為小樂9924的原創文章,轉載請附上原文出處鏈接及本聲明。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • border 邊框css屬性 邊框顏色 border-color邊框樣式 border-style:solid (實線)dashed(虛線)預設為none邊框粗細 border-width:1px;預設是3pxborder的簡寫 border:border-width;border-style;bo ...
  • Map是ES6提供給我們的構造函數,本質上是鍵值對的集合。他和對象類似 特點:key對應value,key和value唯一,任何值都可以當屬性(包括對象)。但在Javascript的Object屬性和值構成的是”字元串-值“對,屬性只能是字元串,如果傳個對象字面量作為屬性名,那麼會預設把對象轉換成字 ...
  • 當viewBox屬性固定,預設修改svg標簽的寬高,svg都會按比例縮放 我們現在不想按比例縮放,需要svg撐滿整個畫面 這裡只需為svg標簽添加一個關鍵屬性:preserveAspectRatio 註意:經過驗證,通過js或jq方法添加該屬性時,需要區分大小寫 ...
  • css 預設樣式重置 1 @charset "utf-8"; 2 *{margin:0;padding:0;} 3 img {border:none; display:block;} 4 em,i{ font-style:normal;} 5 body, div, dl, dt, dd, ul, o ...
  • 遇到的問題 這兩天在開發一個病歷的對外展示頁面,設計稿上label是左右拉伸對齊的,顯示效果如下: 怎麼實現這種效果呢? 首先想到的是文字中間加空格,但是這種方式太low了,而且不太容易控制。網上查資料,發現用justify可以實現。 但是加上上述樣式後,文字依然沒有左右對齊。 justify為什麼 ...
  • 現實的場景中很經常遇到表格el-table數據過多,為了更好的用戶體驗,所以我們需要用到分頁,一般分頁可以視數據量的大小可分為前端控制和後端控制。 先看下效果(已做脫敏處理) 圖1 前端el-table分頁效果 這裡就把ElementUi官方的例子進行修改來說明 <template> <el-tab ...
  • 1.position的值, relative和absolute分別是相對於誰進行定位的? § absolute :生成絕對定位的元素, 相對於最近一級的 定位不是 static 的父元素來進行定位。 § fixed (老IE不支持)生成絕對定位的元素,通常相對於瀏覽器視窗或 frame 進行定位。 ...
  • * ++ -- 都是運算符 * ++ 和 -- 可以分為:前+ 和後+ and 前- 和後- * 如果++在後面:如: num++ +10參與運算 * 先參與運算,運算結束後自身再加1 * 如果++在前面:如: ++num+10參與運算 * 先自身加1,然後再參與運算 * Ctrl+/可以把選中的代 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...