广告位联系
返回顶部
分享到

Go语言加解密利器之go-crypto库用法解析

Golang 来源:互联网 作者:佚名 发布时间:2024-11-27 21:16:19 人浏览
摘要

在软件开发中,数据安全和隐私保护越来越受到重视。Go 语言以其简洁高效的特性,成为了许多开发者的首选。然而,在实际项目中使用加解密时,还是需要在标准库的基础上做一些封装。g

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

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

go-crypto 库简介

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

安装

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

1

go get -u github.com/pudongping/go-crypto

特性

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

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

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

AES 加解密

CBC 模式

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

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

go 加密

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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 解密

1

2

3

4

5

6

7

8

9

10

11

12

13

<?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 加密

1

2

3

4

5

6

7

8

9

$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 解密

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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 加密

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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 解密

1

2

3

4

5

6

7

8

9

10

11

12

<?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 加密和解密的示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

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 的使用方法,为你的项目增加一层安全保障。在实际开发中,合理利用加密技术,可以显著提高系统的安全性和可靠性。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 使用Go语言中的Context取消协程执行的操作介绍
    使用 Go 语言中的 Context 取消协程执行 在 Go 语言中,协程(goroutine)是一种轻量级的线程,非常适合处理并发任务。然而,如何优雅地取消
  • Go语言加解密利器之go-crypto库用法解析
    在软件开发中,数据安全和隐私保护越来越受到重视。Go 语言以其简洁高效的特性,成为了许多开发者的首选。然而,在实际项目中使用加
  • golang怎么判断文件是否存在

    golang怎么判断文件是否存在
    判断一个文件是否存在是一个相当常见的需求,在golang中也有多种方案实现这一功能。 现在我们介绍其中两种最常用也是最简单的实现,第
  • Go语言中的Defer机制的介绍
    在Go语言中,defer是一个关键字,用于确保资源的清理和释放,特别是在函数中创建的资源。defer语句会将其后的函数调用推迟到包含它的函
  • Go集成swagger实现在线接口文档的教程

    Go集成swagger实现在线接口文档的教程
    安装swaggo 1 go install github.com/swaggo/swag/cmd/swag@latest 编写swag 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
  • 基于Golang+Vue编写一个手机远程控制电脑的懒人工

    基于Golang+Vue编写一个手机远程控制电脑的懒人工
    思路 Go语言负责后端,负责模拟键盘输入和鼠标移动 Vue负责页面编写,调用后端接口,使用petite-vue单个页面开发, 够轻量 go直接调用user32
  • Go语言怎么使用Viper来管理配置
    在现代软件开发中,良好的配置管理可以极大地提升应用的灵活性和可维护性。 在 Go 语言中,Viper 是一个功能强大且广泛使用的配置管理库
  • Golang的GC垃圾回收机制的介绍
    在现代编程语言中,垃圾回收(Garbage Collection, GC)机制是一个至关重要的特性。它帮助开发者自动管理内存,避免内存泄漏和悬挂指针等问
  • Golang中类型转换利器cast库的用法
    在Golang开发中,类型转换是一个常见且不可避免的过程。无论是将字符串转换为整数,还是将接口转换为布尔值,类型转换都贯穿在代码的
  • Python框架FastAPI详解介绍

    Python框架FastAPI详解介绍
    FastAPI是一种现代、快速(高性能)的Web框架,用于Python 3.6+,使用Python类型提示构建API。它的设计初衷是帮助开发者在短时间内开发出高性
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计