crypto
-
Go语言中Scrypt与HMAC组合使用的参数顺序陷阱
本文探讨了Go语言中构建密码认证库时,由于scrypt和hmac组合使用时参数顺序不一致导致的问题。通过分析一个具体的案例,揭示了在Check和New函数调用底层hash函数时,HMAC密钥和密码参数被意外调换,从而引发哈希校验失败。文章提供了解决方案,并强调了在编写加密相关代码时,严格遵循参数约定…
-
Go语言中RSA PKCS#1 v1.5数字签名的实现与应用
本教程详细介绍了如何在Go语言中使用crypto/rsa包实现PKCS#1 v1.5数字签名。文章涵盖了RSA密钥对的生成、消息的哈希处理、使用SignPKCS1v15进行签名以及使用VerifyPKCS1v15进行验证的全过程,并提供了实用的代码示例和重要的注意事项,帮助开发者构建安全可靠的数字签…
-
Go语言中获取终端尺寸的正确方法
本文探讨了在Go语言中获取终端尺寸的有效方法。针对直接执行stty size命令失败的问题,我们介绍了如何利用golang.org/x/crypto/ssh/terminal包及其GetSize函数。通过传递标准输入的文件描述符,开发者可以可靠地获取终端的宽度和高度,避免了跨进程TTY关联的复杂性,…
-
Go语言:获取终端(TTY)尺寸的正确实践
本文旨在解决Go语言中获取终端(TTY)尺寸的常见问题。传统上尝试通过执行stty size命令往往因进程与当前TTY分离而失败。我们将介绍并演示如何利用golang.org/x/crypto/ssh/terminal包提供的GetSize函数,结合标准输入的文件描述符,以一种健壮且跨平台的方式准确…
-
如何使用Golang实现文件加密与解密
答案:使用AES-256-CBC模式实现文件加解密,需32字节密钥和16字节随机IV,加密时写入IV和密文,解密时先读IV再解密数据,适用于中小文件,大文件应流式处理。 在Go语言中实现文件的加密与解密,可以使用标准库中的 crypto/aes、crypto/cipher 和 crypto/rand…
-
Golang包的命名规范有哪些
Go包名应简洁、小写、单数,与目录名一致,避免下划线或驼峰命名;2. 使用清晰功能命名如log、db而非utils等泛化词;3. 导出标识符无需重复包名,利用上下文提升可读性。 Go语言的包命名规范强调简洁、清晰和一致性,目的是让代码更易读、易维护。以下是Go社区广泛遵循的包命名规范。 使用简短且小…
-
Golang TCP数据加密传输实现示例
使用TLS协议实现Golang中TCP数据加密传输,首先生成自签名证书server.crt和server.key;接着服务端通过tls.Listen监听并加载证书启用加密;客户端使用tls.Dial连接,设置InsecureSkipVerify跳过验证(测试用);通信内容自动加密,生产环境应使用可信…
-
Go语言中RSA PKCS#1 v1.5数字签名的实现与实践
本文旨在指导读者如何在Go语言中使用crypto/rsa包实现PKCS#1 v1.5数字签名与验证。文章将深入探讨SignPKCS1v15和VerifyPKCS1v15函数的具体用法,并通过详细的代码示例展示从密钥生成、消息哈希、签名到验证的完整流程。此外,还将强调查阅标准库测试文件(_test.g…
-
Go语言切片与就地操作:快速排序的惯用实践
本文深入探讨了在Go语言中如何以惯用方式实现快速排序算法。重点介绍了Go语言切片(slices)的使用、就地(in-place)操作的技巧,以及通过递归实现分治策略。通过详细的代码示例和解释,读者将理解如何利用Go的语言特性编写高效且符合Go风格的快速排序。 Go语言中的快速排序:核心概念与实现 快…
-
使用 Go 语言高效生成大型随机 CSV 测试文件
本文详细阐述了如何使用 Go 语言高效地生成指定大小(例如 10GB)的随机 CSV 文件,其数据格式为 prefix:username:timestamp, number。通过结合 bufio 包进行缓冲写入、math/rand 包生成随机数据以及 time 包处理时间,本教程提供了一个实用的代码…