HMAC

HMAC 的用途

HMAC 算法主要應用于身份驗證,用法如下:

1.客戶端發出登錄請求
2.服務器返回一個隨機值,在會話記錄中保存這個隨機值
3.客戶端將該隨機值作為密鑰,用戶密碼進行 hmac 運算,遞交給服務器
4.服務器讀取數據庫中的用戶密碼,利用密鑰做和客戶端一樣的 hmac運算,然后與用戶發送的結果比較,如果一致,則用戶身份合法。

這么做有什么好處呢? 如果我們在登錄的過程中,黑客截獲了我們發送的數據,他也只能得到 hmac 加密過后的結果,由于不知道密鑰,根本不可能獲取到用戶密碼,從而保證了安全性。

HMAC 的種類

算法種類                摘要長度HmacMD5                 128
HmacSHA1                160
HmacSHA256              256
HmacSHA384              384
HmacSHA512              512

HMAC 的使用

1 . 剛才也看到了,想要使用 HMAC 算法,那么我們需要生成一個密鑰,這個密鑰怎么生成呢?自己隨便瞎填嗎? JDK 中自帶了一個密鑰生成器 KeyGenerator 用于幫助我們生成密鑰,示例如下

public static byte[] getSecretKey() throws Exception {KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5"); // 可填入 HmacSHA1,HmacSHA256 等SecretKey key = keyGenerator.generateKey();byte[] keyBytes = key.getEncoded();return keyBytes;
}

2 . 既然已經得到了密鑰,那么下面就開始執行消息摘要算法,在這之前,由于我們生成的密鑰是以 byte 數組返回的,所以我們需要將其還原成 SecretKey,具體過程如下

public static String encryptHmac(byte[] key, byte[] data) throws Exception {SecretKey secretKey = new SecretKeySpec(key, "HmacMD5");Mac mac = Mac.getInstance("HmacMD5");mac.init(secretKey);byte[] resultBytes = mac.doFinal(data);String resultString = byteToHexString(resultBytes);return resultString;
}

如果想使用其他的算法,可以將填入 HmacMD5 的所有字段改為你想使用的算法即可,比如 HmacSHA1, HmacSHA256 等。

下面對 helloworld 執行算法查看結果

1efd5e8d4d0c20f68bdc732fd7a79677



鏈接:http://www.jianshu.com/p/3fe2add1eb42

轉載于:https://www.cnblogs.com/blue-Wind/p/7591875.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282318.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282318.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282318.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JS的原型鏈和繼承

原型和原型鏈 原型prototype,在創建新函數的時候,會自動生成,而prototype中也會有一個constructor,回指創建該prototype的函數對象。 __proto__是對象或者實例中內置的[[prototype]],其指向的是產生該對象的對象的prot…

Android 的滑動分析以及各種實現

一、滑動效果的產生滑動一個View,本質區別就是移動一個View。改變當前View所在的坐標,原理和動畫相似不斷改變坐標位置實現。實現View的滑動就必須監聽滑動的事件,并且根據事件傳入的坐標,動態且不斷改變View的坐標,從…

微軟產品 .NET 6 遷移之旅

“.NET性能不行!”“.NET有什么像樣的產品嗎!?”“升級到.NET 6有什么好處!?”……聽人扯淡還不如看看微軟自己是怎么做的。本文將匯總一下微軟的開發博客——這些博客均涉及微軟將產品和服務遷移到.NET 6的成果。博客…

Navicat 連接 RDS數據庫

場景介紹: 隨著業務量的逐漸增加,公司的數據庫壓力也會逐漸增大,使用自己購買的esc創建的mysql的話,還得考慮相應的dba維護,也比較繁瑣,說不定還做的并不完美,這時,RDS就派上用場了&…

bzoj1045 糖果傳遞

Description 有n個小朋友坐成一圈&#xff0c;每人有ai個糖果。每人只能給左右兩人傳遞糖果。每人每次傳遞一個糖果代價為1。 Input 第一行一個正整數nn<1000000&#xff0c;表示小朋友的個數&#xff0e;接下來n行&#xff0c;每行一個整數ai&#xff0c;表示第i個小朋友得…

BEGINNING SHAREPOINT#174; 2013 DEVELOPMENT 第9章節--client對象模型和REST APIs概覽 client對象模型API范圍...

BEGINNING SHAREPOINT 2013 DEVELOPMENT 第9章節--client對象模型和REST APIs概覽 client對象模型API范圍 本章之前提到過。client對象模型應用中一個不足就是缺乏對SP APIs和訪問功能的支持不足。轉載于:https://www.cnblogs.com/yutingliuyl/p/6748382.html

為.NET應用添加截圖功能

本文介紹了 .NET 實現截圖功能的思路和過程&#xff0c;如果你僅想了解最后的解決方案&#xff0c;可以直接查看文章末尾。截圖的功能我們應該都經常使用&#xff0c;在開發軟件時&#xff0c;我們有時也或多或少需要提供這方面的功能&#xff0c;無論是為用戶更方便提供遠程診…

K8S集群Master高可用實踐

本文將在前文基礎上介紹k8s集群的高可用實踐&#xff0c;一般來講&#xff0c;k8s集群高可用主要包含以下幾個內容&#xff1a;1、etcd集群高可用2、集群dns服務高可用3、kube-apiserver、kube-controller-manager、kube-scheduler等master組件的高可用 其中etcd實現的辦法較為…

[轉載]智能科普:VR、AR、MR的區別

智能科普&#xff1a;VR、AR、MR的區別 http://news.zol.com.cn/553/5534833.html news.zol.com.cn 2015-11-23 16:00近日&#xff0c; 獲得谷歌5億美元融資的技術公司Magic Leap在WSJD展會中放出了一段實錄視頻&#xff0c;引起不小騷動。如今&#xff0c;也有媒體稱他們為MR公…

PHP項目中,記錄錯誤日志

一、場景介紹&#xff1a; 環境&#xff1a;LNMP 我們通常是通過nginx的錯誤日志來分析分錯的&#xff0c;也就是我們在各個server中定義的error_log。 比如下面這樣&#xff0c;就是將錯誤日志定義在/etc/nginx/logs/error/www.xiaobudiu.top.log&#xff0c;發生錯誤&#xf…

持續集成指南:GitLab 的 CI/CD 工具配置與使用

1前言寫代碼這項工作&#xff0c;本質就是將工作自動化&#xff0c;減少手工操作提供效率&#xff0c;因為人的本質都是懶狗&#xff0c;程序員也不能例外&#xff0c;為了各種意義的效率提升&#xff08;懶&#xff09;&#xff0c;我們需要持續集成工具&#xff0c;將代碼測試…

php 錯誤日志 redis' already loaded in Unknown on line 0

環境介紹&#xff1a;LNMP 報錯信息&#xff1a;注&#xff1a;這個php_errors.log 是我在php.ini 中定義的錯誤日志路徑 問題原因&#xff1a; 報錯信息給出的意思是&#xff1a;redis和memcache 模塊已經加載過問題解決&#xff1a; php加載模塊有兩種方式&#xff0c;一種是…

第一周作業

我的Git賬號&#xff1a;AI1452349541 和代碼圖 這是我在電腦和手機上下的網易有道詞典 &#xff0c; C也下了。 ***學習內容總結*** 感覺任務并不是很難&#xff0c;有些任務沒完成是 因為還沒買電腦不好弄&#xff0c;下周電腦一定到位。 ***遇到的問題…

升級MariaDB為10.1版本

2019獨角獸企業重金招聘Python工程師標準>>> CentOS中升級mariadb為10.1GA版本。 1、如果有&#xff0c;停止服務 systemctl stop mariadb 2、卸載原來的數據庫服務 yum -y remove mari* 3、刪除數據庫文件 rm -rf /var/lib/mysql/* 4.創建/etc/yum.repos.d/MariaDB…

第一篇文章

第一次寫博客。歡迎各位大牛捧場轉載于:https://www.cnblogs.com/clnchanpin/p/6753665.html

羊了個羊的Ignite大會又來啦

據說最近羊了個羊非常火啊&#xff5e;可惜沒有時間精力研究。不過&#xff0c;薅微軟羊毛的機會我是一定不會錯過的&#xff0c;這不&#xff0c;薅羊毛的機會來了&#xff0c;哈哈哈。作為經常薅微軟羊毛的老司機&#xff0c;今天收到了微軟的郵件&#xff0c;告知有新的羊毛…

清除谷歌瀏覽器的dns緩存

谷歌地址欄輸入&#xff1a; chrome://net-internals/#dns出現下面界面&#xff1a;找到DNS選項&#xff0c;選擇clear host cache即可效果&#xff1a;這樣&#xff0c;谷歌瀏覽器上的dns緩存就清理掉了。應用場景&#xff1a; 本地環境和線上環境用的是一個host&#xff0c;這…

生產YUM源搭建

企業內部YUM源搭建轉載于:https://www.cnblogs.com/xiangtanglaojing/p/7603581.html

什么樣的代碼稱得上是好代碼?

“軟件自有其美感所在” --《重構》圖片&#xff1a;崇禮瀚海梁的山花 拍攝于2022年8月13日 攝影師&#xff1a;劉先生這篇內容寫作于4年前&#xff08;2018年&#xff09;&#xff0c;是自己多年軟件開發工作的一點感悟&#xff0c;現在看來雖有偏頗&#xff0c;但總體思想方…

Coding and Paper Letter(十四)

2019獨角獸企業重金招聘Python工程師標準>>> 資源整理。 1 Coding: 1.R語言包ungeviz&#xff0c;ggplot2的拓展包&#xff0c;專門用來作不確定性的可視化。 ungeviz 2.計算機圖形學相關開源項目。 計算機圖形學光線追蹤開源項目C源碼。 computer graphics ray tra…