当前位置: 代码网 > it编程>前端脚本>Golang > Go语言AES加密:如何使用AES/ECB/NoPadding模式加密字符串并进行base64编码?

Go语言AES加密:如何使用AES/ECB/NoPadding模式加密字符串并进行base64编码?

2025年03月29日 Golang 我要评论
go语言aes加密:ecb模式无填充加密与base64编码本文演示如何在go语言中使用aes/ecb/nopadding模式加密字符串,并进行base64编码。 我们将解决一个实际问题:使用密钥"e

go语言aes加密:ecb模式无填充加密与base64编码

本文演示如何在go语言中使用aes/ecb/nopadding模式加密字符串,并进行base64编码。 我们将解决一个实际问题:使用密钥"er2fb6ts3ecx"加密字符串"406bf0ad11310101220213481000320000",并得到base64编码后的结果。

go语言aes加密:如何使用aes/ecb/nopadding模式加密字符串并进行base64编码?

问题与解决方案:

许多aes加密示例使用cbc模式和填充。然而,本例要求使用ecb模式和nopadding。 这需要仔细处理密钥长度和潜在的填充问题。

以下go代码实现了aes/ecb/nopadding加密和base64编码:

package main

import (
    "crypto/aes"
    "encoding/base64"
    "fmt"
    "log"
)

func main() {
    plaintext := []byte("406bf0ad11310101220213481000320000")
    key := []byte("er2fb6ts3ecx")

    ciphertext, err := encryptecb(plaintext, key)
    if err != nil {
        log.fatal(err)
    }

    fmt.printf("ciphertext (base64): %s\n", ciphertext)


    decrypted, err := decryptecb(ciphertext, key)
    if err != nil {
        log.fatal(err)
    }

    fmt.printf("decrypted: %s\n", string(decrypted))
}

func encryptecb(plaintext, key []byte) (string, error) {
    block, err := aes.newcipher(padkey(key))
    if err != nil {
        return "", err
    }

    if len(plaintext)%aes.blocksize != 0 {
        return "", fmt.errorf("plaintext is not a multiple of the block size")
    }

    ciphertext := make([]byte, len(plaintext))
    for i := 0; i < len(plaintext); i += aes.blocksize {
        block.encrypt(ciphertext[i:i+aes.blocksize], plaintext[i:i+aes.blocksize])
    }

    return base64.stdencoding.encodetostring(ciphertext), nil
}

func decryptecb(ciphertext string, key []byte) ([]byte, error) {
    block, err := aes.newcipher(padkey(key))
    if err != nil {
        return nil, err
    }

    decoded, err := base64.stdencoding.decodestring(ciphertext)
    if err != nil {
        return nil, err
    }

    plaintext := make([]byte, len(decoded))
    for i := 0; i < len(decoded); i += aes.blocksize {
        block.decrypt(plaintext[i:i+aes.blocksize], decoded[i:i+aes.blocksize])
    }

    //nopadding, so we don't need to remove padding
    return plaintext, nil
}


func padkey(key []byte) ([]byte, error) {
    if len(key) != 16 && len(key) != 24 && len(key) != 32 {
        return nil, fmt.errorf("invalid key size")
    }
    paddedkey := make([]byte, 16)
    copy(paddedkey, key[:16])
    return paddedkey, nil
}
登录后复制

这段代码包含了encryptecb和decryptecb函数,分别用于ecb模式下的aes加密和解密。padkey函数确保密钥长度为16字节。 由于使用nopadding,我们不需要处理填充。 请注意,ecb模式的安全性较低,不建议在生产环境中使用。

这个改进后的代码更简洁,更易于理解,并且正确处理了密钥长度和nopadding的情况。 记住,在实际应用中,选择更安全的模式(如cbc或gcm)至关重要。

以上就是go语言aes加密:如何使用aes/ecb/nopadding模式加密字符串并进行base64编码?的详细内容,更多请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com