关于nodejs中 废弃的加密方法crypto.createCipher('aes256', key) 使用golang实现

新手上路,请多包涵

一个N年前的nodejs项目,其中一块对密码加密的代码使用的方法是废弃掉的,缺少盐值和加密模式,现在正在使用golang进行重构,不知道该怎么使用go实现下方的加密代码

// 此处是nodejs加密

createToken(src, timestamp, key) {
        const msg = src + '|' + timestamp;
        const cipher = crypto.createCipher('aes256', key);
        let enc = cipher.update(msg, 'utf8', 'hex');
        enc += cipher.final('hex');
        return enc;
    }

// 此处是nodejs解密

    parseToken(token, key) {
        const decipher = crypto.createDecipher('aes256', key);
        let dec;
        try {
            dec = decipher.update(token, 'hex', 'utf8');
            dec += decipher.final('utf8');
        } catch (err) {
            // console.error('[token] fail to decrypt token. %j', token);
            return null;
        }
        const ts = dec.split('|');
        if (ts.length !== 2) {
            // illegal token
            return null;
        }
        return {src: ts[0], timestamp: Number(ts[1])};
    }
阅读 2.9k
1 个回答

crypto/aes

block, err := aes.NewCipher(key)
if err != nil {
    return nil, err
}
blockSize := block.BlockSize()
blockMode := cipher.NewCBCDecrypter(block, iv[:blockSize])
origData := make([]byte, len(ciphertext))
blockMode.CryptBlocks(origData, ciphertext)
origData = PKCS7UnPadding(origData)
return origData, nil

注意在 NewCipher 传 32 字节的密钥来选择 aes256 就行了。

不太清楚 nodejs 默认的 aes256 是 CBC 还是 ECB 还是啥模式,你可以自己百度谷歌搜索下,不然就试一试。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题