实现 hmac sha1 返回16进制的函数
时间: 2023-12-06 14:02:02 浏览: 102
以下是 Python 中实现 HMAC-SHA1 返回 16 进制的函数:
```python
import hmac
import hashlib
def hmac_sha1(key, message):
return hmac.new(key.encode(), message.encode(), hashlib.sha1).hexdigest()
```
其中,`key` 为密钥字符串,`message` 为消息字符串。该函数返回 HMAC-SHA1 计算结果的 16 进制表示字符串。
相关问题
go实现 hmac sha1 返回16进制的函数
下面是一个使用Go语言实现HMAC-SHA1并返回16进制字符串的示例代码:
```go
package main
import (
"crypto/hmac"
"crypto/sha1"
"encoding/hex"
"fmt"
)
func main() {
message := "hello world"
key := "mykey"
mac := hmac.New(sha1.New, []byte(key))
mac.Write([]byte(message))
expectedMAC := mac.Sum(nil)
hexString := hex.EncodeToString(expectedMAC)
fmt.Println(hexString)
}
```
在此示例中,我们使用crypto/hmac和crypto/sha1包来执行HMAC-SHA1哈希。我们使用hmac.New()函数创建一个新的HMAC对象,其中的第一个参数是哈希函数,第二个参数是密钥。然后,我们使用mac.Write()函数输入我们要哈希的消息。最后,我们使用mac.Sum(nil)获取哈希值,并将其传递给hex.EncodeToString()函数,以将其转换为16进制字符串。
运行此程序将输出以下内容:
```
104fb0e174f9d55c9f9e0b3eabe53908290b6cd5
```
这是使用HMAC-SHA1算法生成的16进制字符串哈希值。
在不使用库的情况下用javaScript实现HMAC-SHA256
HMAC-SHA256是一种哈希算法,它需要密钥和消息输入。在JavaScript中,我们可以使用CryptoJS库来实现HMAC-SHA256。但是,如果您不想使用库,可以尝试以下方法:
```javascript
function hmacSHA256(key, message) {
const sha256HashLength = 64; // SHA-256 hash length in bytes
const blockSize = 512; // HMAC block size in bits
const ipad = 0x36; // Inner padding value
const opad = 0x5c; // Outer padding value
// Convert key and message to byte arrays
const keyBytes = new TextEncoder().encode(key);
const messageBytes = new TextEncoder().encode(message);
// If the key is longer than the block size, hash it first
if (keyBytes.length > blockSize / 8) {
keyBytes = new Uint8Array(await crypto.subtle.digest('SHA-256', keyBytes));
}
// Pad the key with zeros to the block size
const paddedKey = new Uint8Array(blockSize / 8);
paddedKey.set(keyBytes);
paddedKey.forEach((byte, index) => {
paddedKey[index] ^= ipad;
});
// Concatenate the padded key and message
const concatenated = new Uint8Array(paddedKey.length + messageBytes.length);
concatenated.set(paddedKey);
concatenated.set(messageBytes, paddedKey.length);
// Hash the concatenated value
const hashed = new Uint8Array(await crypto.subtle.digest('SHA-256', concatenated));
// Pad the outer key with zeros to the block size
const outerPaddedKey = new Uint8Array(blockSize / 8);
outerPaddedKey.set(keyBytes);
outerPaddedKey.forEach((byte, index) => {
outerPaddedKey[index] ^= opad;
});
// Concatenate the outer padded key and the hashed value
const finalConcatenated = new Uint8Array(outerPaddedKey.length + sha256HashLength);
finalConcatenated.set(outerPaddedKey);
finalConcatenated.set(hashed, outerPaddedKey.length);
// Compute the final hash
const finalHash = await crypto.subtle.digest('SHA-256', finalConcatenated);
// Convert the final hash to a hexadecimal string
return Array.from(new Uint8Array(finalHash))
.map((byte) => byte.toString(16).padStart(2, '0'))
.join('');
}
```
上面的函数接受密钥和消息字符串作为输入,并返回一个十六进制字符串,它是HMAC-SHA256哈希。请注意,此函数使用JavaScript的Web Cryptography API来执行哈希计算。如果您需要在旧版浏览器上运行此代码,则需要使用polyfill来支持Web Cryptography API。