gcm
均指 aes-256-gcm
最近在做了一个基于 aes-256-gcm
加密算法的Http通信,一开始 server, client 都是用golang写的, 引入同一个pkg,加解密没问题,后来
改用 js 写 client, 用了原生的 crypto
pkg 做加解密,OK,问题前述就是这样
const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
在 js 中, crypto 这个包在生成cipher的时候,传入三个参数,第一个是算法名,第二个是 key, gcm 中使用的是 32 byte
, 早期的 aes-128-gcm 使用的是 16 byte
, 中间还有个 aes-192-gcm
golang 的gcm返回值只有一个[]byte,而js的返回应该是两个,一个是 cipher.Update + cipher.final 的buff(text 加密结果) 以及 gcm 的tag,为了对比 golang 的结果排列顺序,传入同一个 iv,
然后 print 结果的buff, 对比值,知道了 golang 的结果是 iv + encodedText +tag 返回的
// go: noescape
这个 marker,虽然我不会写汇编和阅读汇编,至少让我了解了更多的关于 golang 的一些东西中间虽然花费了较大的功夫去阅读元代码,但是让我对aes的了解就比单纯的看看文档理解多了很多,同时也间接的了解了golang中的一些小case, 还是学到了很多东西