1. 程式人生 > >HMAC-SHA1簽名認證演算法

HMAC-SHA1簽名認證演算法

HMAC-SHA1:

HMAC是雜湊運算訊息認證碼 (Hash-based Message Authentication Code),HMAC運算利用雜湊演算法,以一個金鑰和一個訊息為輸入,生成一個訊息摘要作為輸出。HMAC-SHA1簽名演算法是一種常用的簽名演算法,用於對一段資訊進行生成簽名摘要。

生成一個隨機祕鑰(python範例):

#coding:utf-8

from Crypto.PublicKey import RSA
from Crypto import Random
import hashlib

#get random sk
def get_sk():
    random_generator = Random.new().read
    key = RSA.generate(1024, random_generator)
    exportedKey = key.exportKey()
    return hashlib.sha1(exportedKey).hexdigest()

print get_sk()


使用祕鑰和訊息生成一個簽名(python範例):

#coding:utf-8

import hashlib
import hmac
import base64

# 祕鑰
sk = "e3988cce1bdcd1db1b0a1313e598b12040d4e16f"

# 需要加密的msg,自定義
msg = "GET\nuid:001\n1467556840"


#授權
def get_authorization(sk, msg):
    hashing = hmac.new(sk, msg, hashlib.sha1).hexdigest()
    return hashing

print get_authorization(sk, msg)


需要注意哪些問題:

a) hmac-sha1可以認為是不可逆的加密演算法,sk只能儲存在伺服器,不能通過任何途徑傳輸給客戶端

b) 伺服器發一個簽名給客戶端,此後伺服器通過簽名來校驗客戶端的訪問許可權

c) msg通過明文傳輸,然後伺服器使用sk和傳輸的msg生成簽名進行校驗 

d) 客戶端和伺服器通過生成的簽名是否一致判斷校驗是否通過

ps:實際應用遠比這兩個小例子複雜,

由於sk不能明文傳輸,需要設計一個ak/sk對,ak用於明文傳輸,伺服器根據ak從資料庫查詢對應的sk,同時伺服器也需要判斷該使用者是否擁有ak的所有權。

通常時間戳也應該加入到msg中,並明文傳輸一份給伺服器,伺服器先通過明文傳遞的時間戳校驗是否過期,再通過簽名校驗時間戳是否正確。

適用場景:

比如亞馬遜對外提供雲端儲存服務,A公司購買了亞馬遜的服務,亞馬遜給A公司註冊了獨有的ak/sk(每個公司的祕鑰都不一樣)並告知A公司,同時告知A公司加密演算法原理,並要求A公司必須把sk儲存在伺服器上,否則祕鑰洩露了A公司需要自行承擔責任。

A公司在亞馬遜存放了一批資源,那麼A公司的使用者B訪問亞馬遜時,使用者B先到A公司的伺服器申請一個簽名,使用者B拿著簽名到亞馬遜獲取資源,亞馬遜根據約定的演算法校驗使用者B的訪問許可權。

注意:本質上有別於OAuth 2.0,因為使用者B屬於A公司的,而不是亞馬遜的。

End;

相關推薦

HMAC-SHA1簽名認證演算法

HMAC-SHA1:HMAC是雜湊運算訊息認證碼 (Hash-based Message Authentication Code),HMAC運算利用雜湊演算法,以一個金鑰和一個訊息為輸入,生成一個訊息摘要作為輸出。HMAC-SHA1簽名演算法是一種常用的簽名演算法,用於對一

Java對PHP伺服器hmac sha1簽名認證方法的匹配實現

                如果你的API服務安全認證協議中要求使用hmac_sha1方法對資訊進行編碼, 而你的服務是由PHP實現的,客戶端是由JAVA實現的,那麼為了對簽名正確比對,就需要在兩者之間建立能匹配的編碼方式.PHP側如下:define('ID','123456');define('KEY'

HMAC-SHA1簽名演算法(JAVA和PHP) base64簽名演算法(PHP)

HMAC 根據RFC 2316(Report of the IAB,April 1998),HMAC(雜湊訊息身份驗證碼: Hashed Message Authentication Code)以及IPSec被認為是Interact安全的關鍵性核心協議。它不是雜湊函式,而是採用了將MD5或S

HMAC-SHA1簽名演算法(JAVA和PHP) base64簽名演算法(PHP)

HMAC 根據RFC 2316(Report of the IAB,April 1998),HMAC(雜湊訊息身份驗證碼: Hashed Message Authentication Code)以及IPSec被認為是Interact安全的關鍵性核心協議。它不是雜湊函式,而是

PHP RSA演算法 HMAC-SHA1加密演算法

HMAC-SHA1加密演算法 function getSignature($str, $key) { $signature = ""; if (function_exists('hash_hmac')) { $signature = base64_encode(h

C++實踐(五)C++實現認證演算法:基於SHA-512的HMAC

基於SHA-512的HMAC演算法 SHA是使用最廣泛的Hash函式。其家族有SHA-1,SHA-2(包括SHA-256/SHA-384/SHA-512)。SHA1與SHA2都使用了同樣的迭代結構和模算術與二元邏輯操作。在本實驗中,我們採用SHA-512。

HMAC-SHA1 20位簽名 解決方法。

在做 auth 認證的時候 需要進行 HMAC-SHA1 演算法進行簽名, 官方給出的實現 引用了第三方庫 openssl 不便於移植,所以需要HMAC-SHA1的演算法實現。 對加密演算法無甚研究,具體說說子的解決方法吧    從前輩那下載了一個hash演算法 http:/

OAuth認證HMAC-SHA1簽署 實現

HMAC-SHA1簽署方式使用[RFC2104] (Krawczyk, H., Bellare, M., and R. Canetti, “HMAC: Keyed-Hashing for Message Authentication,” .)中定義的HMAC-SHA1簽署演算

hmac-sha1加密演算法C原始碼示例

HMAC: Hash-based Message Authentication Code,即基於Hash的訊息鑑別碼 在各大開放平臺大行其道的網際網路開發潮流中,呼叫各平臺的API介面過程中,無一例外都會用到計算簽名值(sig值)。而在各種計算簽名的方法中,經常被採用的就

HMAC-SHA1和MD5 訊息摘要演算法(java)

最近專案中需要對接支付,用到HMAC-SHA1和MD5兩種加密演算法,簡單回顧一下。 一、HMAC-SHA1  HMAC是金鑰相關的雜湊運算訊息認證碼(Hash-based Message Authentication Code),HMAC運算利用雜湊演算法,以一個金鑰和

php對應C hmac sha1演算法 (OAuth 1.0 加密生成oauth_signature 需要)

function oauth_hmacsha1($key, $data) { return base64_encode(hmacsha1($key, $data)); } function hmacsha1($key,$data) { $blocksize=64;

在 ubuntu 搭建需要簽名認證的私有 docker registry 倉庫

.com chunked required 社區 apach proto remote tps grep 前言 在前面的一篇博客《在 ubuntu 搭建 docker registry 私有倉庫》介紹了一種簡單的搭建 docker 私有倉庫了的方法。但是當時使用的是修改“-

簽名認證

inf idt info 簽名 對比 服務 bsp 生成 解密 簽名認證也叫數字簽名認證,也就是說將通信正文進行數字簽名後接收端會通過數字簽名對通信正文進行驗證完整性。 客戶端參數簽名生成 客戶端在發送參數前會對參數進行約定的順序排序,並通過MD5等摘要算法生成摘要,隨後將

kbmmw 做REST 服務簽名認證的一種方式

map() make 分享圖片 請求參數 func end finall bject service 一般對外提供提供REST 服務,由於信息安全的問題, 都要采用簽名認證,今天簡單說一下在KBMMW 中如何 實現簡單的簽名服務? 整個簽名服務,模仿阿裏大魚的認證方式,

BASE64、MD5、SHA、HMAC幾種加密演算法(轉)

本篇內容簡要介紹BASE64、MD5、SHA、HMAC幾種加密演算法。     BASE64編碼演算法不算是真正的加密演算法。     MD5、SHA、HMAC這三種加密演算法,可謂是非可逆加密,就是不可解密的加密方法,我們稱之為單向加密演

MD5介面簽名認證

 我方位資料來源,與三方做資料對接要做的兩件事情 1.因三方pull資料需要三方提供生產環境 IP 地址,我方配置IP白名單 2.三方公司會下發提供測試、生產環境的  securityKey=xxooYYxx 做簽名認證,請求引數多加一個 signat

阿里雲免費SSL證書對IOS描述檔案mobileconfig的簽名認證

1.購買阿里雲免費證書:跳轉 阿里雲SSL證書 2.選擇免費選項如圖 3.等等稽核成功下載 4.選擇其他下載證書,開啟壓縮包內容如下 首先找到公鑰public.pem檔案,一串數字字尾為key的,一串數字字尾為pem的祕鑰檔案 5.重新命名: publ

go實現橢圓曲線加解密、簽名驗證演算法(go ecdsa庫的運用),及生成比特幣地址過程講解、base58實現

go實現橢圓曲線加解密、簽名驗證演算法(go ecdsa庫的運用),及生成比特幣地址過程講解、BASE58實現 前言 本文主要講解使用Go的ecdsa庫實現橢圓曲線加解密、簽名、驗證演算法,同時通過公鑰生成比特幣地址,具體程式碼邏輯參考bitcoin0

HMAC-SHA256 簽名方法各個語音的實現方式之前端JavaScriptes6

sha256和16進位制輸出,網上很多種後端的驗證方法,幾乎沒有前端的,所以自己寫了個,希望給類似需求的人一個幫助,適用場景 騰訊雲介面鑑權 v3簽名 npm install sha256npm install crypto-js   impor

java實現SHA1簽名加密

   公司需要開發一個對外介面API,需要用到SHA1安全雜湊演算法,具體需求如下: Sign計算規則: 引數示例: identityType:1Sign計算規則: 引數示例: identityType:1 identityValue:44090119770919431