我正在编写一段代码来使用对称加密来加密文本.但它没有以正确的结果回归......
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字节的倍数?这是正常的吗?
我猜它没有回到原始消息,因为计数器在加密和解密之间发生了变化.但那么,它究竟应该在理论上如何运作呢?我究竟做错了什么?无论如何,我被迫回到欧洲央行,直到我弄明白:(
我在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 …
我正在寻找使用诸如pycrypto之类的加密库来加密/解密我的python webapp数据库中的字段.但加密算法需要密钥.如果我的源代码中有一个未加密的密钥,那么在我的服务器上尝试加密db字段似乎很愚蠢,如果有人可以访问db文件,他们也可以访问我的python源代码.
是否有保护所用密钥的最佳实践方法?或者另一种加密db字段的方法(在应用程序而不是db级别)?
更新:我试图保护的字段是oauth令牌.
更新:我想没有常见的方法来避免这种情况.我想我无论如何都需要加密字段,因为db文件可能会被备份和移动,所以至少我会将问题减少到一个易受攻击的位置 - 查看我的源代码.
更新:当用户离线时,需要将oauth令牌用于api调用,因此在这种情况下使用他们的密码作为密钥是不合适的.
我在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) 没有名为Crypto.Cipher的模块
当我尝试导入时
来自Crypto.Cipher导入AES
我的文件夹结构如下所示:
测试/
测试/ main.py
测试/ pycrypto-2.3
我运行构建并安装在pycrypto文件夹内,但我一直收到错误,任何想法?
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)
谢谢.
我有一个使用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可以使用它
我有一个密码,可以通过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) 我尝试使用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得到了相同的结果.
我试图在我的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如何知道在哪里找到未解决的链接的内部.
pycrypto ×10
python ×9
cryptography ×3
aes ×2
cryptojs ×1
database ×1
des ×1
javascript ×1
openssl ×1
paramiko ×1
pip ×1
pyside ×1
python-2.x ×1
rsa ×1