ALG_HMAC_256
时间: 2023-08-07 07:02:21 浏览: 53
ALG_HMAC_256是指使用HMAC-SHA256算法进行消息认证码(MAC)计算的一种密码学算法。HMAC-SHA256是一种基于SHA-256散列函数和密钥的消息认证码算法,用于验证消息的完整性和身份认证。
HMAC-SHA256算法的运算过程如下:
1. 获取输入消息和密钥。
2. 使用SHA-256散列函数对密钥进行处理,如果密钥长度超过散列函数输入块大小,则先对密钥进行散列。
3. 将处理后的密钥与消息进行异或操作,再使用SHA-256散列函数计算结果。
4. 将步骤3中的结果与处理后的密钥再次进行异或操作,并使用SHA-256散列函数计算结果。
5. 重复步骤4,直到计算得到最终的MAC。
HMAC-SHA256算法提供了一种安全的消息认证方式,可以防止消息被篡改或伪造。它在各种安全协议和应用中广泛使用,如数字签名、身份验证、安全通信等。
相关问题
import json import datetime import hashlib import hmac import base64 app_key = 'cms自动化测试-online' app_secret = 'Nj8MmpI3QBQzr1UibCCgPhNaJXnOpqn8FR+kStbOTMw' # Set headers for JWT header = { 'typ': 'JWT', 'alg': 'HS256' } # Prepare timestamp in seconds current_timestamp = datetime.datetime.now().timestamp() data = { "app_key": app_key, 'iat': current_timestamp, 'exp': current_timestamp + 30 # expiry time is 30 seconds from time of creation } def base64url(source): # Encode in classical base64 encoded_source = base64.b64encode(source,altchars=b'-_') # Remove padding equal characters encoded_source = encoded_source.rstrip(b'=') print(encoded_source) return encoded_source.decode('utf-8') # encode header stringified_header = json.dumps(header).encode('utf-8') encoded_header = base64url(stringified_header) # encode data stringified_data = json.dumps(data).encode('utf-8') encoded_data = base64url(stringified_data) # build token token = encoded_header + '.' + encoded_data # print(token) # sign token signature = hmac.new(app_secret.encode('utf-8'), token.encode('utf-8'), hashlib.sha256).digest() encoded_signature = base64url(signature) signed_token = token + '.' + encoded_signature
这段代码是用于生成一个JWT(JSON Web Token)的。JWT是一种用于身份验证和授权的标准。这个代码片段首先定义了一些变量,包括应用程序的密钥和密钥。然后,它创建了一个包含当前时间戳和其他数据的字典。接下来,它将头部和数据部分转换为JSON字符串,并对其进行Base64编码。然后,它将编码后的头部和数据拼接起来,并使用应用程序密钥对其进行HMAC-SHA256签名。最后,它将签名编码并将其附加到令牌末尾,得到最终的JWT。
// JWT generation script adapted from // https://gist.github.com/corbanb/db03150abbe899285d6a86cc480f674d var appKey = 'cms自动化测试-online'; var appSecret = 'Nj8MmpI3QBQzr1UibCCgPhNaJXnOpqn8FR+kStbOTMw'; // Set headers for JWT var header = { 'typ': 'JWT', 'alg': 'HS256' }; // Prepare timestamp in seconds var currentTimestamp = Math.floor(Date.now() / 1000) var data = { "app_key": appKey, 'iat': currentTimestamp, 'exp': currentTimestamp + 30 // expiry time is 30 seconds from time of creation } function base64url(source) { // Encode in classical base64 encodedSource = CryptoJS.enc.Base64.stringify(source) // Remove padding equal characters encodedSource = encodedSource.replace(/=+$/, '') // Replace characters according to base64url specifications encodedSource = encodedSource.replace(/\+/g, '-') encodedSource = encodedSource.replace(/\//g, '_') return encodedSource } // encode header var stringifiedHeader = CryptoJS.enc.Utf8.parse(JSON.stringify(header)) var encodedHeader = base64url(stringifiedHeader) // encode data var stringifiedData = CryptoJS.enc.Utf8.parse(JSON.stringify(data)) var encodedData = base64url(stringifiedData) // build token var token = `${encodedHeader}.${encodedData}` // sign token var signature = CryptoJS.HmacSHA256(token, appSecret) signature = base64url(signature) var signedToken = `${token}.${signature}` console.log('Signed and non-encoded JWT', signedToken) pm.globals.set("signedToken",signedToken);
这段代码与之前的Python代码功能相同,用于生成JWT。代码片段首先定义了一些变量,包括应用程序的密钥和密钥。然后,它创建了一个包含当前时间戳和其他数据的对象。接下来,它将头部和数据部分转换为JSON字符串,并对其进行Base64编码。然后,它将编码后的头部和数据拼接起来,并使用应用程序密钥对其进行HMAC-SHA256签名。最后,它将签名编码并将其附加到令牌末尾,得到最终的JWT。最后,它使用console.log输出签名和非编码的JWT,并将其存储在Postman的全局变量中。