AES-128加密算法Go代码测量加密解密时间
时间: 2024-09-10 09:07:24 浏览: 79
AES-128是一种对称加密算法,用于保护数据的安全传输。在Go语言中,你可以使用标准库`crypto/aes`来实现AES-128加密和解密。下面是一个简单的示例,展示了如何测量加密和解密的时间:
```go
package main
import (
"crypto/aes"
"crypto/cipher"
"encoding/hex"
"fmt"
"time"
)
func main() {
key := []byte("0123456789abcdef0123456789abcdef") // 16字节的AES-128 key
message := []byte("Hello, AES!")
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
// 创建一个固定的填充模式,因为AES需要块大小的整数倍
padding := 16 - len(message)%16
paddedMessage := message
paddedMessage = append(paddedMessage, byte(padding))
for i := 0; i < padding; i++ {
paddedMessage = append(paddedMessage, byte(padding))
}
// 加密
startTime := time.Now()
ciphertext := make([]byte, aes.BlockSize+len(paddedMessage))
iv := ciphertext[:aes.BlockSize]
if _, err := cipher.NewCTR(block, iv).XORKeyStream(ciphertext[aes.BlockSize:], paddedMessage); err != nil {
panic(err)
}
encryptedHex := hex.EncodeToString(ciphertext)
fmt.Println("Encrypted:", encryptedHex)
elapsedEncrypt := time.Since(startTime)
fmt.Printf("Encrypt time: %v\n", elapsedEncrypt)
// 解密
startTime = time.Now()
plaintext, err := decrypt(encryptedHex, key)
if err != nil {
panic(err)
}
elapsedDecrypt := time.Since(startTime)
fmt.Printf("Decrypted back to: '%s'\n", plaintext)
fmt.Printf("Decrypt time: %v\n", elapsedDecrypt)
// 函数:解密函数,这里省略了具体实现,因为实际操作通常会将解密部分封装成独立方法
func decrypt(ciphertextHex string, key []byte) ([]byte, error) {
// ... (此处还原密文)
return nil, nil
}
```
在这个例子中,我们首先创建一个AES-128块并进行加密。然后计算加密所需时间,接着解密并再次测量时间。请注意,这只是一个基础示例,实际应用中你需要处理错误、初始化向量和更复杂的流式处理。
阅读全文