V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  awanganddong  ›  全部回复第 2 页 / 共 26 页
回复总数  515
1  2  3  4  5  6  7  8  9  10 ... 26  
140 天前
回复了 awanganddong 创建的主题 Go 编程语言 golang 怎么实现 rsa 加解密
这个代码实现了 RSA 加密和解密的一些功能,以下是对代码的详细解释:

错误定义
定义了一些可能会在 RSA 加密/解密过程中遇到的错误:

ErrDataToLarge:
ErrDataLen:
ErrDataBroken:
ErrKeyPairDismatch:
ErrDecryption:
ErrPublicKey:
ErrPrivateKey: 获取私钥错误。
公钥解密函数
pubKeyDecrypt
用公钥解密数据:

计算模数的字节长度,并检查数据长度是否符合要求。
将数据转换为大整数,并检查数据是否超出模数的范围。
通过模幂运算解密数据。
去掉填充字节,返回解密后的数据。
LeftUnPad
去掉左边的填充字节:

检查第一个字节是否为 0 。
检查第二个字节是否为 0 或 1 。
找到第一个非零字节的索引,返回剩余的数据。
RightUnPad
去掉右边的填充字节:

从右边开始找到第一个非零字节的索引,返回剩余的数据。
私钥加密函数
priKeyEncrypt
用私钥加密数据:

计算模数的字节长度,检查数据长度是否符合要求。
创建加密的消息,填充数据。
通过模幂运算加密数据,返回加密后的数据。
公钥和私钥加密/解密读写器
pubKeyIO
用公钥进行加密或解密:

根据是否加密,调整块大小。
读取数据块,加密或解密数据块,写入输出。
priKeyIO
用私钥进行加密或解密:

根据是否加密,调整块大小。
读取数据块,加密或解密数据块,写入输出。
公钥和私钥加密/解密字节数组
PubKeyByte
用公钥加密或解密字节数组:

根据是否加密,调整块大小。
如果数据长度小于块大小,直接加密或解密。
否则,通过读写器进行处理,返回处理后的数据。
PriKeyByte
用私钥加密或解密字节数组:

根据是否加密,调整块大小。
如果数据长度小于块大小,直接加密或解密。
否则,通过读写器进行处理,返回处理后的数据。
获取公钥和私钥函数
GetPubKey
从 Base64 编码的字符串中读取公钥:

解码 Base64 字符串,调用 GetPubKeyFromPem 解析 PEM 格式的公钥。
GetPubKeyFromPem


解码 PEM 格式的公钥,解析成 RSA 公钥。
GetPriKey
从 Base64 编码的字符串中读取私钥:

解码 Base64 字符串,调用 GetPriKeyFromPem 解析 PEM 格式的私钥。
GetPriKeyFromPem
从 PEM 格式的字节数组中读取私钥:

解码 PEM 格式的私钥,解析成 RSA 私钥。
内部工具函数
encrypt
加密函数,执行模幂运算。

decrypt
解密函数,执行模幂运算。

copyWithLeftPad
在左边填充 0 以适应指定大小。

nonZeroRandomBytes
生成非零的随机字节。

leftPad
在左边填充字节以适应指定大小。

modInverse
计算

这些函数和方法共同实现了 RSA 公钥加密、私钥解密、私钥加密、公钥解密的功能,包括读取和解析公钥/私钥文件,处理填充和数据块的分割等。
140 天前
回复了 awanganddong 创建的主题 Go 编程语言 golang 怎么实现 rsa 加解密
谢谢大家,@sophos 你写的我让 chatgpt 给解析下
142 天前
回复了 awanganddong 创建的主题 Go 编程语言 golang 怎么实现 rsa 加解密
go get github.com/farmerx/gorsa
找到了这个扩展
142 天前
回复了 awanganddong 创建的主题 Go 编程语言 golang 怎么实现 rsa 加解密
@hellolinuxer 我需要的是公钥解密
172 天前
回复了 xiaoqi6pi112 创建的主题 Android 请问在苏州有哪些 APP 开发的公司靠谱?
个人给的建议是直接买一套第三方的代码,就可以了。代码方面的话建议 php 的,主要这个是最简单的。后期业务量大的话,就可以用 golang 进行替换。这种项目推广为主,先挣钱再说。
不是,是一些牵扯到扣费的逻辑,为了保证用户余额的一致性,然后串行扣费。
@rahuahua Kratos 一套轻量级 Go 微服务框架,包含大量微服务相关功能及工具。 我刚看了下项目结构,和我需要的不太相符。
@qloog 你发的代码连接地址我看了。增加了 repo 层,我看看 kratos 框架。
找到解决方案了,可以再重新起一个 server

然后记得指定就可以了
client.Enqueue(task1, asynq.Queue("notifications"))
@yanmumumumu
https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}

这个接口一次性消耗没有的
2023-11-01 11:43:50 +08:00
回复了 awanganddong 创建的主题 Go 编程语言 golang 内存对齐的问题
如果是 64 位的机器那肯定是 8 字节对齐了的,所以是上面第一种方式
如果在 32 位的机器上
如果恰好 8 字节对齐了,那么也是第一种方式取前面的 8 字节数据
如果是没有对齐,但是 32 位 4 字节是对齐了的,所以我们只需要后移四个字节,那么就 8 字节对齐了,所以是第二种方式


还是有疑惑,32 位不都是 4 字节对齐,为啥要后移 4 个字节,然后取数据。
2023-10-31 18:48:25 +08:00
回复了 awanganddong 创建的主题 Go 编程语言 golang 内存对齐的问题
https://zhuanlan.zhihu.com/p/106933470

我之前困惑的点在于,在 32 位下访问 8 字节需要两次,怎么保证原子性呢。

然后这篇文章有提到
The first word in a variable or in an allocated struct, array, or slice can be relied upon to be 64-bit aligned.
变量或开辟的结构体、数组和切片值中的第一个 64 位字可以被认为是 8 字节对齐


32 位系统下可原子安全访问的 64 位字有:
64 位字本身
64 位字数组、切片
结构体首字段为对齐的 64 位字及相邻的 64 位字
结构体中首字段为嵌套结构体,且其首元素为 64 位字
结构体增加填充使对齐的 64 位字
结构体中 64 位字切片
结构体中 64 位字指针
2023-10-31 18:14:56 +08:00
回复了 awanganddong 创建的主题 Go 编程语言 golang 内存对齐的问题
state1 [3]uint32
2023-09-12 22:49:02 +08:00
回复了 awanganddong 创建的主题 C 请教下 mac 环境下,我这几行代码的问题在哪里
谢谢大家的解答了
2023-08-17 17:51:35 +08:00
回复了 lushiwu 创建的主题 程序员 选 go 还是 Java
推荐选 java ,虽说 java 现在特别卷,但是 java 技术栈的工作岗位是最多的。
楼主可以直接下载个 boss 直聘,自己去看看北上广深的工作岗位。那个是招人最多的。
虽说语言是个工具,但是归根到底公司的技术栈是有侧重点的。

我觉得你现在其实是好高骛远了。
先把数据结构和算法这些首先掌握了,大厂必备。然后就是学习 java 框架。然后就是数据库,缓存这些中间件,一般就是 mysql,redis,es,kafka 这些。再之后就是各个微服务的理解,基本上就是网关和 rpc 这些。如果是做长连接这些的话,那就是网络协议这块。再深入可能就是 vim 虚拟机垃圾回收之类的东西。

如果你把 java 学会之后,回过头学习 go ,基本上一个月时间就差不多了。
go 语言的话,也是内存垃圾回收,gmp 。channel,map,sync 的底层实现,相比之教,东西会比 java 少的多。
2023-07-13 14:11:57 +08:00
回复了 dzdh 创建的主题 Go 编程语言 怎么优雅的处理不固定的 json 内容
这个帖子是一个解决方案
Go 如何解析 json 内部结构不确定的情况

https://my.oschina.net/u/4628563/blog/4724059
2023-07-12 22:14:31 +08:00
回复了 awanganddong 创建的主题 Go 编程语言 go 分隔符处理粘包拆包问题
@Vegetable 好的,谢谢了。
2023-07-12 22:10:25 +08:00
回复了 awanganddong 创建的主题 Go 编程语言 go 分隔符处理粘包拆包问题
这个文章可以参考

消息长度固定,提前确定包长度,读取的时候也安固定长度读取,适合定长消息包。
使用特殊的字符或字符串作为消息的边界,例如 HTTP 协议的 headers 以“\r\n”为字段的分隔符
自定义协议,将消息分为消息头和消息体,消息头中包含表示消息总长度

https://wangbjun.site/2019/coding/golang/golang-tcp-package.html

谢谢各位
2023-07-12 22:04:32 +08:00
回复了 awanganddong 创建的主题 Go 编程语言 go 分隔符处理粘包拆包问题
bufio.NewReader 这个概念,理解错了。这个得出来的结果比较清晰一些
```
func main() {
conn, err := net.Dial("tcp", "127.0.0.1:8866")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
_, err = conn.Write([]byte("bbbb\ndfdfdfdfd\nsdsdsd"))
_, err = conn.Write([]byte("aaa\n"))
if err != nil {
panic(err)
}
time.Sleep(time.Second)
}

```
1  2  3  4  5  6  7  8  9  10 ... 26  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   940 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 25ms · UTC 20:44 · PVG 04:44 · LAX 12:44 · JFK 15:44
Developed with CodeLauncher
♥ Do have faith in what you're doing.