标签: pycrypto

使用AES + CTR的PyCrypto问题

我正在编写一段代码来使用对称加密来加密文本.但它没有以正确的结果回归......

from Crypto.Cipher import AES
import os

crypto = AES.new(os.urandom(32), AES.MODE_CTR, counter = lambda : os.urandom(16))
encrypted = crypto.encrypt("aaaaaaaaaaaaaaaa")
print crypto.decrypt(encrypted)
Run Code Online (Sandbox Code Playgroud)

这里,解密的文本与原始文本不同.

我对密码学的了解并不多,所以请耐心等待.我理解CTR模式需要一个"计数器"功能来每次提供一个随机计数器,但为什么当我的密钥是32字节时它需要它是16个字节并且它坚持我的消息也是16字节的倍数?这是正常的吗?

我猜它没有回到原始消息,因为计数器在加密和解密之间发生了变化.但那么,它究竟应该在理论上如何运作呢?我究竟做错了什么?无论如何,我被迫回到欧洲央行,直到我弄明白:(

python cryptography aes encryption-symmetric pycrypto

10
推荐指数
2
解决办法
2万
查看次数

如何验证openssl创建的pycrypto签名?

我在openssl中创建了私钥/公钥,并签署了一些数据:

openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -outform PEM -pubout
echo 'data to sign' > data.txt
openssl dgst -md5 < data.txt > hash
openssl rsautl -sign -inkey private.pem -keyform PEM -in hash  > signature
Run Code Online (Sandbox Code Playgroud)

现在在python中,我正在尝试验证这些数据:

pubKey = open('public.pem').read()
data = open('data.txt').read()
signature = open('signature').read()

from Crypto import PublicKey
key = PublicKey.RSA.importKey(pubKey)
pub = key.publickey()
hash = MD5.new(data).hexdigest()
# here, hash is same, as contents of 'hash' file
print pub.verify(hash, signature) # <-- here
Run Code Online (Sandbox Code Playgroud)

问题是,pub.verify …

python openssl python-2.x pycrypto

10
推荐指数
3
解决办法
1万
查看次数

如何安全地存储加密密钥?

我正在寻找使用诸如pycrypto之类的加密库来加密/解密我的python webapp数据库中的字段.但加密算法需要密钥.如果我的源代码中有一个未加密的密钥,那么在我的服务器上尝试加密db字段似乎很愚蠢,如果有人可以访问db文件,他们也可以访问我的python源代码.

是否有保护所用密钥的最佳实践方法?或者另一种加密db字段的方法(在应用程序而不是db级别)?

更新:我试图保护的字段是oauth令牌.

更新:我想没有常见的方法来避免这种情况.我想我无论如何都需要加密字段,因为db文件可能会被备份和移动,所以至少我会将问题减少到一个易受攻击的位置 - 查看我的源代码.

更新:当用户离线时,需要将oauth令牌用于api调用,因此在这种情况下使用他们的密码作为密钥是不合适的.

python database cryptography web-applications pycrypto

10
推荐指数
1
解决办法
3676
查看次数

python中的_fastmath错误:HAVE_DECL_MPZ_POWM_SEC

我在Red Hat 6.4上运行python 2.6

我使用paramiko sftp在一台机器上运行了一个脚本.当我把它转移到另一台机器时,我得到了一个例外:( SFTP file has no attribute __exit__沿着这些方向的东西).

我决定用pip升级paramiko(认为它会解决问题).现在我在运行python脚本时得到这个:

  ...
  File "/usr/lib/python2.6/site-packages/paramiko/__init__.py", line 64, in <module>
    from transport import SecurityOptions, Transport
  File "/usr/lib/python2.6/site-packages/paramiko/transport.py", line 33, in <module>
    from paramiko import util
  File "/usr/lib/python2.6/site-packages/paramiko/util.py", line 33, in <module>
    from paramiko.common import *
  File "/usr/lib/python2.6/site-packages/paramiko/common.py", line 98, in <module>
    from Crypto import Random
  File "/usr/lib64/python2.6/site-packages/Crypto/Random/__init__.py", line 29, in <module>
    from Crypto.Random import _UserFriendlyRNG
  File "/usr/lib64/python2.6/site-packages/Crypto/Random/_UserFriendlyRNG.py", line 38, in <module>
    from Crypto.Random.Fortuna import FortunaAccumulator
  File "/usr/lib64/python2.6/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.py", line 39, …
Run Code Online (Sandbox Code Playgroud)

python paramiko pycrypto

10
推荐指数
2
解决办法
1万
查看次数

本地mac AppEngine上没有名为Crypto.Cipher的模块

没有名为Crypto.Cipher的模块

当我尝试导入时

来自Crypto.Cipher导入AES

我的文件夹结构如下所示:

测试/

测试/ main.py

测试/ pycrypto-2.3

我运行构建并安装在pycrypto文件夹内,但我一直收到错误,任何想法?

google-app-engine pycrypto

9
推荐指数
1
解决办法
1万
查看次数

使用pycrypto,如何导入RSA公钥并使用它来加密字符串?

RSA公钥:

PUBKEY = 'MIGfMA0GCSqGSIb3DQEBA3UAA4GNADCBiQKBgQC35eMaYoJXEoJt5HxarHkzDBEMU3qIWE0HSQ77CwP/8UbX07W2XKwngUyY4k6Hl2M/n9TOZMZsiBzer/fqV + QNPN1m9M94eUm2gQgwkoRj5battRCaNJK/23GGpCsTQatJN8PZBhJBb2Vlsvw5lFrSdMT1R7vaz + 2EeNR/FitFXwIDAQAB'

如何导入并使用它来加密字符串?

我尝试了以下代码,但RSA.construct()引发了异常(TypeError:必须是long,而不是str).

from Crypto.PublicKey import RSA
from Crypto.Util import asn1
from base64 import b64decode

keyDER = b64decode(pubkey)
seq = asn1.DerSequence()
seq.decode(keyDER)
keyPub = RSA.construct((seq[0], seq[1]))
print keyPub.encrypt('mysecret', 32)
Run Code Online (Sandbox Code Playgroud)

谢谢.

python rsa pycrypto

9
推荐指数
5
解决办法
5万
查看次数

app engine:ImportError:没有名为Crypto.Hash的模块

我有一个使用Crypto.Hash但导入失败但错误的脚本:

ImportError: No module named Crypto.Hash
Run Code Online (Sandbox Code Playgroud)

在我的sys.path打印sys.path列表中,有这个条目(以及其他):

/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/pycrypto-2.6
Run Code Online (Sandbox Code Playgroud)

如果我打开上面的路径,则没有pycrypto-2.6目录.

我怎样才能加载pycrypto 2.6?

如果我Crypto.Hash从命令行导入运行python它的工作原理

我必须指出app Engine支持pycrypto,它包含在此列表中.

此外,我已将模块包含在我的app.yaml文件中:

libraries:
- name: webapp2
  version: "2.5.2"
- name: pycrypto
  version: latest
- name: lxml
  version: "2.3"
- name: ssl
  version: latest
Run Code Online (Sandbox Code Playgroud)

如果我在生产中发送代码在appengine它工作,问题是在我的系统我应该下载pycrypto的编译版本并把它放在某处appengine可以使用它

python google-app-engine pycrypto

9
推荐指数
1
解决办法
1万
查看次数

如何在Python中解密来自JavaScript CryptoJS.AES.encrypt(密码,密码)的密码

我有一个密码,可以通过JavaScript加密

  var password = 'sample'
  var passphrase ='sample_passphrase'
  CryptoJS.AES.encrypt(password, passphrase)
Run Code Online (Sandbox Code Playgroud)

然后我尝试解密密码来自Python中的JavaScript:

  from Crypto.Cipher import AES
  import base64

  PADDING = '\0'

  pad_it = lambda s: s+(16 - len(s)%16)*PADDING
  key = 'sample_passphrase'
  iv='11.0.0.101'        #------> here is my question, how can I get this iv to restore password, what should I put here?
  key=pad_it(key)        #------> should I add padding to keys and iv?
  iv=pad_it(iv)          ##
  source = 'sample'
  generator = AES.new(key, AES.MODE_CFB,iv)
  crypt = generator.encrypt(pad_it(source))
  cryptedStr = base64.b64encode(crypt)
  print cryptedStr
  generator = AES.new(key, …
Run Code Online (Sandbox Code Playgroud)

javascript python aes pycrypto cryptojs

9
推荐指数
1
解决办法
5313
查看次数

为什么我可以使用一个DES密钥加密数据并成功解密另一个DES密钥?

我尝试使用pyDes和Crypto.Cipher.DES模块实现DES算法.我发现了一个问题,当我用82514145密钥加密然后解密密码93505044我可以检索解密的文本.我发现256个键表现得像这样.这违反了密码学.我的代码如下:

    from Crypto.Cipher import DES
    plain_text = 'asdfghij'
    print 'plain Text: ', plain_text

    des = DES.new('82514145', DES.MODE_ECB)
    cipher_text = des.encrypt(plain_text)
    print 'the cipher text is ', cipher_text

    des = DES.new('93505044', DES.MODE_ECB)
    print 'the decrypted text is: ', des.decrypt(cipher_text)
Run Code Online (Sandbox Code Playgroud)

输出是:

plain Text:  asdfghij

the cipher text is  @?Z????

the decrypted text is:  asdfghij
Run Code Online (Sandbox Code Playgroud)

我的工作有什么不对吗?我也用pyDes得到了相同的结果.

python cryptography des encryption-symmetric pycrypto

7
推荐指数
1
解决办法
1378
查看次数

编译Python调试和pip安装调试库

我试图在我的PySide应用程序中调试一些神秘的崩溃.我目前在Windows上使用Python 2.7,并希望构建Python和PySide的调试版本以帮助调试.我按照这里的说明使用MSVC 2013构建Python的调试版本.构建大部分工作,一些我不关心无法编译的库.

我使用上面链接中的相同说明将相关文件复制到c:\ python27_d,并为其设置虚拟环境.但是,当我尝试easy_install或pip安装库,如paramiko或pycrypto时,我会收到链接错误:

winrand.obj : error LNK2019: unresolved external symbol __imp__Py_InitModule4 referenced in function _initwinr
andom

build\lib.win32-2.7-pydebug\Crypto\Random\OSRNG\winrandom.pyd : fatal error LNK1120: 1 unresolved externals
Run Code Online (Sandbox Code Playgroud)

通常,如何为Python的调试版本安装库或模块?我为提出如此广泛的问题而道歉,但我不熟悉Python如何知道在哪里找到未解决的链接的内部.

python pip pyside pycrypto visual-studio-2013

7
推荐指数
1
解决办法
774
查看次数