Encryption Golang在不同的机器上生成相同的加密

Encryption Golang在不同的机器上生成相同的加密,encryption,go,aes,Encryption,Go,Aes,我有一个go脚本,它使用crypto/aes加密和解密明文 我希望这个脚本可以在不同的机器上使用,并生成相同的加密文本。我认为,通过自定义IV,无论在何处,都可以实现一致的加密。 现在,它在运动场上和在运动场上产生不同的结果 是否有可能产生一致的加密,或者由于内部实现(如加密盐等),加密是否总是不同的 还有,IV到底是什么,我还是很困惑。文档没有真正解释它是什么我弄明白了为什么每次都会生成不同的密码文本。静脉注射是随机化的 if _, err := io.ReadFull(rand.Reade

我有一个go脚本,它使用crypto/aes加密和解密明文

我希望这个脚本可以在不同的机器上使用,并生成相同的加密文本。我认为,通过自定义IV,无论在何处,都可以实现一致的加密。 现在,它在运动场上和在运动场上产生不同的结果

是否有可能产生一致的加密,或者由于内部实现(如加密盐等),加密是否总是不同的


还有,IV到底是什么,我还是很困惑。文档没有真正解释它是什么

我弄明白了为什么每次都会生成不同的密码文本。静脉注射是随机化的

if _, err := io.ReadFull(rand.Reader, iv); err != nil {
    panic(err)
}

删除它将保持IV不变,并且它将生成相同的加密,因为任何机器上都有相同的密钥和IV

我弄明白了为什么它每次都生成不同的密码文本。静脉注射是随机化的

if _, err := io.ReadFull(rand.Reader, iv); err != nil {
    panic(err)
}

删除它将使IV保持不变,并在给定相同密钥的情况下生成相同的加密。任何机器上的IV都是nonce。重复使用IV会破坏它的用途,并且会破坏你的加密。现在这就更有意义了。这是否意味着无法生成相同的一致加密?不安全,为什么要这样做?产生可预测的输出违背了加密的目的。这听起来像是你有一个不同的问题要解决。你在找加密哈希函数吗?我想。这个想法是在一个数据库中加密用户ID,其中用户ID应该是密钥。我想你可以使用用户名的散列来生成一个可预测的IV,但我觉得单独使用散列会更安全。IV是一个nonce。重复使用IV会破坏它的用途,并且会破坏你的加密。现在这就更有意义了。这是否意味着无法生成相同的一致加密?不安全,为什么要这样做?产生可预测的输出违背了加密的目的。这听起来像是你有一个不同的问题要解决。你在找加密哈希函数吗?我想。这个想法是在一个数据库中加密用户ID,其中用户ID应该是密钥。我想你可以使用用户名的散列来生成一个可预测的IV,但是我觉得单独使用散列会更安全。不要这样做。只需在加密数据前面加上IV,以便在解密过程中使用,IV不需要是机密的。在某些实现中确实需要这样做。例如,我在我的一个应用程序中使用PayTM作为支付网关,而IV应该是固定的。不要这样做。只需在加密数据前面加上IV,以便在解密过程中使用,IV不需要是机密的。在某些实现中确实需要这样做。例如,我在我的一个应用程序中使用PayTM作为支付网关,并且应该在那里修复IV。