首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Go语言中的加解密利器:go-crypto库全解析

Go语言中的加解密利器:go-crypto库全解析

原创
作者头像
左诗右码
修改2024-11-26 10:38:38
修改2024-11-26 10:38:38
6590
举报

文章开始之前,推荐一些别人写的很好的文章!感兴趣的小伙伴也可以去读一下哦!

今日推荐:进程、线程与协程的区别

文章链接:https://cloud.tencent.com/developer/article/2470390

进程、线程和协程在现代编程中运用已经屡见不鲜了,但是依然还是有不少人不太理解各自的关系,这篇文章很好的对这三个概念做了解释,并且也对比了各自的优缺点,非常不错的一篇科普文章,非常值得一读!


在软件开发中,数据安全和隐私保护越来越受到重视。Go 语言以其简洁高效的特性,成为了许多开发者的首选。然而,在实际项目中使用加解密时,还是需要在标准库的基础上做一些封装。go-crypto 库应运而生,它是一个专为 Golang 设计的加密解密工具库,提供了 AES 和 RSA 等多种加密算法的支持。

本文将从安装、特性、基本与高级功能,以及实际应用场景等多个角度,全面介绍这个库。

go-crypto 库简介

go-crypto 是一个为 Golang 设计的加密解密工具库,它实现了多种常用的加密算法,包括 AES 和 RSA 等。通过这个库,开发者可以轻松地在 Go 语言项目中实现数据的加密和解密,保障数据传输和存储的安全性。

安装

要在你的 Go 项目中使用 go-crypto,首先需要通过 go get 命令安装:

代码语言:shell
复制
go get -u github.com/pudongping/go-crypto

特性

go-crypto 库提供了以下特性:

  1. **AES加解密方法**:支持电码本模式(ECB)、密码分组链接模式(CBC)、计算器模式(CTR)、密码反馈模式(CFB)和输出反馈模式(OFB)。
  2. **RSA加解密方法**:支持 RSA 加密和解密。

接下来,我就分别以 Go 和 PHP 加解密分别来演示其用法。

AES 加解密

CBC 模式

CBC 模式是密码分组链接模式,它通过将前一个块的加密结果与当前块的明文进行 XOR 操作,增加了加密数据的安全性。以下是使用 go-crypto 库进行 AES-CBC 加密和解密的示例:

Go加密,PHP解密(AES-128-CBC)

go 加密

代码语言:go
复制
package main



import (

    "fmt"

    "github.com/pudongping/go-crypto"

)



func main() {

    plaintext := "hello world! My name is Alex Pu"

    key := "1234567890123456" // 密钥字节长度必须为16个字节



    ciphertext, err := go\_crypto.AESCBCEncrypt(plaintext, key)

    if err != nil {

        fmt.Println("出错啦!", err)

    }

    fmt.Println(ciphertext)

}

PHP 解密

代码语言:php
复制
<?php

$key = '1234567890123456';

$iv = mb\_substr($key, 0, 16);

$s = 'BRK08I0OYOoFwhgIBT1qjFywFkLADdeLQfVZM7CPKJ8=';



$str = base64\_decode($s);

$decrypted = openssl\_decrypt($str, 'AES-128-CBC', $key, OPENSSL\_RAW\_DATA, $iv);

if (!$decrypted) {

    echo '解密失败' . PHP\_EOL;

} else {

    echo($decrypted) . PHP\_EOL;

}

?>
php 加密,go 解密(AES-128-CBC)

PHP 加密

代码语言:php
复制
$string = 'hello world! alex';

$key = '1234567890123456';

$iv = mb\_substr($key, 0, 16);



$encrypted = openssl\_encrypt($string, 'AES-128-CBC', $key, OPENSSL\_RAW\_DATA, $iv);

$s = base64\_encode($encrypted);



// output is: YAZkDJYi7e9O09TRNvUf+6sFMlI8AQvZ5GVU+xJIuOc=

echo $s . PHP\_EOL;

Go 解密

代码语言:go
复制
import "github.com/pudongping/go-crypto"



func main() {

    ciphertext := "YAZkDJYi7e9O09TRNvUf+6sFMlI8AQvZ5GVU+xJIuOc="

    key := "1234567890123456"

    

    plaintext, err := go\_crypto.AESCBCDecrypt(ciphertext, key)

    if err != nil {

        fmt.Println("出错啦!", err)

    }

    

    // output is: 解密 ==>  hello world! alex

    fmt.Println("解密 ==> ", plaintext)

}

ECB 模式

ECB 模式是电码本模式,它是最简单的加密模式,但安全性较低,通常不推荐使用。以下是使用 go-crypto 库进行 AES-ECB 加密和解密的示例:

Go加密,PHP解密(AES-128-ECB)

go 加密

代码语言:go
复制
package main



import (

    "fmt"

    "github.com/pudongping/go-crypto"

)



func main() {

    plaintext := "hello world! My name is Alex Pu"

    key := "1234567890123456" // 密钥字节长度必须为16个字节



    ciphertext, err := go\_crypto.AESECBEncrypt(plaintext, key)

    if err != nil {

        fmt.Println("出错啦!", err)

    }

    fmt.Println(ciphertext)

}

php 解密

代码语言:php
复制
<?php

$key = '1234567890123456';

$s = 'sRFeHhndretZFZE9/7WdGuGw1QYl8l/IlI1XEtpVzxI=';



$str = base64\_decode($s);

$decrypted = openssl\_decrypt($str, 'AES-128-ECB', $key, OPENSSL\_RAW\_DATA);

if (!$decrypted) {

    echo '解密失败' . PHP\_EOL;

} else {

    echo($decrypted) . PHP\_EOL;

}

?>

RSA 加解密

go-crypto 库还提供了 RSA 加密和解密的功能。以下是使用 go-crypto 库进行 RSA 加密和解密的示例:

代码语言:go
复制
package main



import (

    "fmt"

    "github.com/pudongping/go-crypto"

)



func main() {

    privateKey := []byte(`-----BEGIN RSA PRIVATE KEY-----

...

-----END RSA PRIVATE KEY-----`)



    publicKey := []byte(`-----BEGIN PUBLIC KEY-----

...

-----END PUBLIC KEY-----`)



    plaintext := "hello world"

    fmt.Println("原文 ==> ", plaintext)

    ciphertext, err := go\_crypto.RSAEncrypt(publicKey, []byte(plaintext))

    if err != nil {

        fmt.Println(err)

        return

    }



    plaintext1, err := go\_crypto.RSADecrypt(privateKey, ciphertext)

    fmt.Println("解密 ==> ", string(plaintext1))

    if err != nil {

        fmt.Println(err)

        return

    }

}

应用场景

假设你正在开发一个需要安全通信的分布式系统,go-crypto 库可以用于加密敏感数据,如用户信息、支付信息等,确保数据在传输过程中的安全性。通过使用 AES 加密,你可以保护数据不被未授权访问,而 RSA 加密则可以用于安全地传输密钥。

结语

go-crypto 库为 Go 语言开发者提供了一个强大而灵活的加密解密工具。通过本文的详细介绍,希望你能深入理解并掌握 go-crypto 的使用方法,为你的项目增加一层安全保障。在实际开发中,合理利用加密技术,可以显著提高系统的安全性和可靠性。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • go-crypto 库简介
  • 安装
  • 特性
  • AES 加解密
    • CBC 模式
      • Go加密,PHP解密(AES-128-CBC)
      • php 加密,go 解密(AES-128-CBC)
    • ECB 模式
      • Go加密,PHP解密(AES-128-ECB)
  • RSA 加解密
  • 应用场景
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档