正如您所读到的,这种方法破坏了算法非常重要的安全功能,并且绝不能用于保护任何类型的实时系统。但是,对于某些类型的测试和开发来说,它可能很有用。我假设这就是你的意思。
关键是rsa.EncryptOAEP
接受任意的io.Reader
为其熵。它不是require这是一个rand.Reader
。如果你不关心系统的安全性,它可以是任何你喜欢的。例如,您可以构建一个永远返回零的“零读取器”:
type zeroReader struct{}
func (z zeroReader) Read(p []byte) (n int, err error) {
for i, _ := range p {
p[i] = 0
}
n = len(p)
return
}
这样你就可以通过zeroReader{}
作为你的熵:
// !!! The security of this call is completely broken !!!
// !!! It must never be used on live data !!!
encryptedBytes, err := rsa.EncryptOAEP(
sha256.New(),
zeroReader{}, // !!! I am intentionally breaking the security here !!!
&publicKey,
[]byte(message),
nil)
如果您确实打算将其用于任何类型的实时数据,那么您必须重新设计系统以不需要此功能。就像您链接的问题一样,人们常常尝试这样做,因为他们误解了 RSA。不要那样做。
操场 https://go.dev/play/p/8C8qg3F9See