- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经安装了 pyCrypto 包在 Python 2.7.1 上做一些加密操作。
Q1:我想做的操作是用private Key
(而不是public Key
)加密一些数据。这个库好像做不到。我对吗?如果是这样,是否有任何图书馆能够做到这一点?
Q2:在documentation没有提到使用哪种哈希算法来计算签名!如何找出 sign
方法使用了哪个哈希函数?
Q3:您会看到有关 encrypt
方法的文档的一部分:
encrypt(self, plaintext, K)
Encrypt a piece of data with RSA.
Parameters:
plaintext (byte string or long) - The piece of data to encrypt with RSA. It may not be numerically larger than the RSA module (n).
(Censored!)
正如您在上面看到的,输入数据仅限于那些在数值上不大于 RSA 模块的数据。这是否意味着我无法使用模块 = 0x11...(257 bytes)
的 RSA key 对加密 0x21...(257 bytes)
(例如) 因为 0x21 大于 0x11?如果是这样,为什么?每次都比较加密前的值是不是很奇怪?!还是仅仅意味着数据长度必须等于或小于模块长度?
最佳答案
在公钥密码学中,您不用私钥加密——您总是使用公钥。否则,由于公钥是“公开的”,任何人都可以解密密文。
您可能想交替使用公钥和私钥,但一般来说,给定私钥,您无需太多工作就可以计算出公钥。因此,如果您将私钥提供给某人并认为您会保证公钥的安全,那么它就不安全了。
当他们说不大于模数时,他们指的是字节大小。它实际上会小于模数的大小(2048 位 RSA key 对为 256 字节)。但数据实际上应该小于模块,因为您将希望始终 填充数据。填充,例如使用 OAEP 填充,随机化密文。每次加密相同的明文时,您都会得到看起来随机的不同密文。这很重要,因为否则即使攻击者没有私钥,密文也很脆弱并且容易受到攻击。因此,您想为数据和填充留出一些空间以适应模数(例如 256 字节)。
通常,您使用私钥进行签名。在 RSA 中,这实际上使用私钥“加密”,但我认为您不会在任何流行的 API 中找到“使用私钥加密”。
我不熟悉 pyCrypto,但在我看来,您在签名时会选择自己喜欢的哈希值。你自己散列,并将摘要提供给 sign 函数,据我从我搜索过的示例中可以看出。
关于python - 如何在python中使用RSA私钥加密数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38045324/
我是一名优秀的程序员,十分优秀!