- it want to encrypt data on web and decrypt on golang server
- when iv size is 12, it run well
- fail when size is 16
- the js library is using 16 iv size
- the golang decrypt code is
h := sha256.New()
io.WriteString(h, "123")
key := h.Sum(nil)
c, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
gcm, err := cipher.NewGCM(c)
if err != nil {
panic(err)
}
out, err := gcm.Open(nil, encrypted[0:gcm.NonceSize()], encrypted[gcm.NonceSize():], nil)
if err != nil {
panic(err)
}
- the javascript encryte code
const iv = crypto.getRandomValues(new Uint8Array(12));
const alg = { name: 'AES-GCM', iv: iv };
const key = await crypto.subtle.importKey('raw', pwHash, alg, false, ['encrypt']);
const ptUint8 = new TextEncoder().encode(plaintext);
const ctBuffer = await crypto.subtle.encrypt(alg, key, ptUint8);
using 16 bit size
ok for using NewGCMWithNonceSize()
think