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

 更新时间:2024年11月26日 11:21:40   作者:左诗右码  
在软件开发中,数据安全和隐私保护越来越受到重视,go-crypto 库应运而生,它是一个专为 Golang 设计的加密解密工具库,下面就跟随小编一起来看看它的具体使用吧

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

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

go-crypto 库简介

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

安装

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

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

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

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

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

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

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

到此这篇关于Go语言加解密利器之go-crypto库用法解析的文章就介绍到这了,更多相关Go加解密go-crypto库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang并发ping主机的方法

    golang并发ping主机的方法

    今天小编就为大家分享一篇golang并发ping主机的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Go使用Weighted实现资源管理

    Go使用Weighted实现资源管理

    这篇文章主要介绍了Go 语言中的 Weighted 并发原语,包括 Weighted 的基本使用方法、实现原理、使用注意事项等内容,感兴趣的小伙伴可以了解一下
    2023-06-06
  • Go语言标准库sync.Once使用场景及性能优化详解

    Go语言标准库sync.Once使用场景及性能优化详解

    这篇文章主要为大家介绍了Go语言标准库sync.Once使用场景及性能优化详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Go语言实现23种设计模式的使用

    Go语言实现23种设计模式的使用

    设计模式是软件工程中各种常见问题的经典解决方案,,本文主要介绍了Go语言实现23种设计模式的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 浅谈go中切片比数组好用在哪

    浅谈go中切片比数组好用在哪

    数组和切片都是常见的数据结构,本文将介绍Go语言中数组和切片的基本概念,同时详细探讨切片的优势,感兴趣的可以了解下
    2023-06-06
  • Golang 如何判断数组某个元素是否存在 (isset)

    Golang 如何判断数组某个元素是否存在 (isset)

    这篇文章主要介绍了Golang 如何判断数组某个元素是否存在 (isset),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • golang中单向channel的语法介绍

    golang中单向channel的语法介绍

    通过消息来共享数据是golang的一种设计哲学,channel则是这种哲理的体现。下面这篇文章主要给大家介绍了关于golang中单向channel语法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面来一起看看吧。
    2017-07-07
  • Go并发编程之死锁与活锁的案例分析

    Go并发编程之死锁与活锁的案例分析

    死锁就是在并发程序中,两个或多个线程彼此等待对方完成操作,从而导致它们都被阻塞,并无限期地等待对方完成;活锁就是程序一直在运行,但是无法取得进展。本文将从一些案例出发,分析一下它们,希望对大家有所帮助
    2023-04-04
  • 用go实现反向代理的代码示例

    用go实现反向代理的代码示例

    当实现反向代理时,Go语言是一个强大而受欢迎的选择,Go具有出色的并发性和网络编程支持,使其成为构建高性能反向代理的理想工具,在本文中,我将介绍如何使用Go语言实现一个简单的反向代理服务器,并提供相应的源代码,需要的朋友可以参考下
    2023-06-06
  • 使用Go语言实现简单聊天系统

    使用Go语言实现简单聊天系统

    本文介绍了如何使用Go语言和WebSocket技术构建一个简单的多人聊天室系统,包括客户端连接管理、消息广播和并发处理,最后,通过编写main.go、hub.go和client.go等核心代码模块,具有一定的参考价值,感兴趣的可以了解一下
    2024-10-10

最新评论