我想使用RSA加密整數。Python RSA加密整數
我發現,我可以加密字符串,但不能使用加密的整數。
這裏是相關的代碼片段:
無法加密整數,4:
crypto:~$ python
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from Crypto.PublicKey import RSA
>>> input=4
>>> rsa=RSA.generate(1024)
>>> print rsa.encrypt(input,"")[0].encode('hex')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/Crypto/PublicKey/pubkey.py", line 64, in encrypt
ciphertext=self._encrypt(plaintext, K)
File "/usr/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 71, in _encrypt
return (self.key._encrypt(c),)
TypeError: must be long, not int
>>>
現在,我代表人數爲十六進制的字符串,它的工作原理:
crypto:~$ python
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from Crypto.PublicKey import RSA
>>> input='\x04'
>>> rsa=RSA.generate(1024)
>>> print rsa.encrypt(input,"")[0].encode('hex')
09f7d33972b0b6b72136f8aef0c8ba4446afad0dcf65337cd8b6c48c3758f5455e19e9c1ecbd058d7f83bcaa1f860b1ea0197d83f91fa958e6c9a2664a7ebee77c41fbfc4d3960e98afc0d94d1af8a230c4d86fce53f4c7ac72ae40a8acb101b40de6d46fe8e3cb7265f253b410a95a255e5fad0d0438d1fc62ad1feb96d331f
使用檢查模塊我檢查了RSA對象的加密函數的源代碼,它說它可以加密字符串或整數純文本:
crypto:~$ python
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import inspect
>>> from Crypto.PublicKey import RSA
>>> rsa=RSA.generate(1024)
>>> rsa
<_RSAobj @0x29c1368 n(1024),e,d,p,q,u,private>
>>> print inspect.getsource(rsa.encrypt)
def encrypt(self, plaintext, K):
"""encrypt(plaintext:string|long, K:string|long) : tuple
Encrypt the string or integer plaintext. K is a random
parameter required by some algorithms.
"""
wasString=0
if isinstance(plaintext, types.StringType):
plaintext=bytes_to_long(plaintext) ; wasString=1
if isinstance(K, types.StringType):
K=bytes_to_long(K)
ciphertext=self._encrypt(plaintext, K)
if wasString: return tuple(map(long_to_bytes, ciphertext))
else: return ciphertext
那麼,爲什麼當我嘗試使用RSA對象加密一個數字時,它會給出一個錯誤?
爲什麼它預計投入是長期的格式,而不是詮釋?
是的,我知道它期望long類型的參數。我的問題是,爲什麼期望很長而不是整數?其次,我不提供輸入的原因是因爲你不能在長對象上調用encode('hex')。它會導致錯誤。而我正在使用的程序,它將始終調用rsa.encrypt的輸出上的encode('hex')方法。這就是爲什麼,我需要一種方式來發送我的輸入作爲一個整數。 Will \ x04與4號相同嗎? –
答覆已更新。請檢查。@ NeonFlash – zhangyangyu
感謝您的更新。加密腳本的源代碼已寫入。它要求我輸入一個將被加密的輸入。現在,源代碼正在使用編碼('十六進制')加密的結果,正如我在代碼片段中提到的那樣。正如我所說的,我需要一種方法來發送一個數字作爲加密腳本的輸入,同時它不應該是長格式。這是因爲加密腳本在加密輸出上使用了編碼('十六進制')。如果您輸入的時間太長,則會發生錯誤。我的問題是,我如何以字符串格式輸入數字? –