1 回答
TA贡献1795条经验 获得超7个赞
正如您所读到的,这种方法破坏了算法的非常重要的安全特性,并且绝不能用于保护任何类型的实时系统。但是,对于某些类型的测试和开发,它可能很有用。我会假设这就是你的意思。
关键是它的熵rsa.EncryptOAEP接受任意io.Reader值。它不要求这是一个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。不要那样做。
- 1 回答
- 0 关注
- 157 浏览
添加回答
举报