标签: pycrypto

使用PKCS5 Python进行AES解密填充

我一直在尝试用Python实现AES CBC解密.由于加密文本不是16字节的倍数,因此填充是必要的.没有填充,此错误浮出水面

"TypeError:奇长字符串"

但我找不到在PyCrypto Python中实现PKCS5的正确参考.有没有命令来实现这个?谢谢

在研究了马库斯的建议后,我做到了这一点.

我的目标实际上是使用此代码解密十六进制消息(128字节).但是,输出是"?:",它非常小,unpad命令正在删除这些字节.这是代码.

from Crypto.Cipher import AES
BS = 16
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS) 
unpad = lambda s : s[0:-ord(s[-1])]

class AESCipher:
    def __init__( self, key ):
    self.key = key 

    def encrypt( self, raw ):
        raw = pad(raw)
        iv = raw[:16]
        raw=raw[16:]
        #iv = Random.new().read( AES.block_size )
        cipher = AES.new( self.key, AES.MODE_CBC, iv )
        return ( iv + cipher.encrypt( raw ) ).encode("hex")

    def …
Run Code Online (Sandbox Code Playgroud)

python aes pycrypto cbc-mode

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

PyCrypto:AssertionError("PID检查失败.必须在fork()之后重新初始化RNG.提示:尝试Random.atfork()")

我正在创建执行不同任务的各种流程.其中一个,只有其中一个,有一个安全模块,可以创建PyCrypto对象.所以我的程序启动,创建各种进程,处理消息的进程使用安全模块解密,我得到以下错误:

   firstSymKeybin = self.cipher.decrypt(encFirstSymKeybin, '')
  File "/usr/local/lib/python2.7/dist-packages/Crypto/Cipher/PKCS1_v1_5.py", line 206, in decrypt
    m = self._key.decrypt(ct)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 174, in decrypt
    return pubkey.pubkey.decrypt(self, ciphertext)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/PublicKey/pubkey.py", line 93, in decrypt
    plaintext=self._decrypt(ciphertext)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 235, in _decrypt
    r = getRandomRange(1, self.key.n-1, randfunc=self._randfunc)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/Util/number.py", line 123, in getRandomRange
    value = getRandomInteger(bits, randfunc)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/Util/number.py", line 104, in getRandomInteger
    S = randfunc(N>>3)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/Random/_UserFriendlyRNG.py", line 187, in read
    return self._singleton.read(bytes)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/Random/_UserFriendlyRNG.py", line 163, in read
    return _UserFriendlyRNG.read(self, bytes)
  File "/usr/local/lib/python2.7/dist-packages/Crypto/Random/_UserFriendlyRNG.py", line …
Run Code Online (Sandbox Code Playgroud)

python encryption pycrypto python-2.7

11
推荐指数
1
解决办法
3019
查看次数

Python PyCrypto使用AES加密/解密文本文件

我已经有了一个工作程序,但唯一不起作用的是decrypt_file()我的功能.我仍然可以从文件中复制加密文本并将其放入我的decrypt()函数中并使其工作,但是当我尝试使用我应该使用的方便decrypt_file()函数时,它会抛出错误.现在我知道99.999%确定我encrypt()decrypt()函数都没问题,但是当我读取并编码抛出错误的文本文件时,会有字节和字符串转换的内容; 我只是找不到挂断.请帮忙!

我的计划:

from Crypto import Random
from Crypto.Cipher import AES

def encrypt(message, key=None, key_size=256):
    def pad(s):
        x = AES.block_size - len(s) % AES.block_size
        return s + ((bytes([x])) * x)

    padded_message = pad(message)

    if key is None:
        key = Random.new().read(key_size // 8)

    iv = Random.new().read(AES.block_size)
    cipher = AES.new(key, AES.MODE_CBC, iv)

    return iv + cipher.encrypt(padded_message)

def decrypt(ciphertext, key):
    unpad = lambda s: s[:-s[-1]]
    iv = ciphertext[:AES.block_size]
    cipher = AES.new(key, AES.MODE_CBC, iv) …
Run Code Online (Sandbox Code Playgroud)

python encryption file aes pycrypto

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

PyCrypto for Alpine3 in Alpine?

是否有一个适用于Alpine的软件包允许我为Python 3安装PyCrypto?

遇到问题后pip3 install pycrypto,我偶然发现了这个帖子里面介绍了如何在高山安装numpy的使用apk add py-numpy@testing.PyCrypto也可以使用Python2.7安装apk add py-crypto.但是,我似乎无法弄清楚如何为Python3调用pycrypto,即使这个包存在.

作为替代解决方案,我尝试使用C编译器gcc,apk add gcc以便pip3 install pycrypto可以编译设置工具.但是,当我用gcc运行该命令时,它会抛出一个致命的错误:

...
running build_ext
running build_configure
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/tmp/pip-build-2TivSm/pycrypto':
configure: error: C compiler cannot create executables
...
Run Code Online (Sandbox Code Playgroud)

有无法在Alpine中编译Python3模块吗?

python pycrypto python-3.x alpine-linux

11
推荐指数
1
解决办法
4982
查看次数

使用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万
查看次数

在Python中实现完整的RSA

我目前正在使用python实现一个项目,以实现两台(或更多)计算机之间的p2p通信.虽然我非常精通python,但我绝不是专家; 编程和加密绝不是我的专业,只是一种爱好.但是,在开展此项目时,我一直在尝试了解有关加密和网络编程的更多信息.

截至目前,我已经编写了一个非常强大的类,可以通过网络进行良好的通信,我正在尝试通过实现RSA来加密网络中对等体之间的连接来改进它.这是我遇到一些困难的地方.

我以前使用过pycrypto在python中进行一些基本的加密/解密,因此对所涉及的所有工具都很满意 - 包括必要的公钥密码.此外,我也知道pycrypto有一些缺点,因为它只实现了实现RSA所需的简单,低级加密/解密算法,并且没有实现公钥加密的完整协议.我也知道pycrypto包含一些其他有用的工具,如AllOrNothing转换,可用于填充通信等.但是,我的问题是:任何人都可以推荐任何在线文章,书籍,博客文章,项目等等帮助我实现有效的RSA协议?

最后,我理解这对于密码学家来说是一个敏感话题,因为业余实现的协议通常意味着程序中的安全性较低.如上所述,这个项目仅仅是一次学习经历; 如果我专业地完成这个项目,我肯定会使用M2Crypto或其他一些专业实施的安全协议 - 即SSL/TLS.唉,我只是试图通过实现我自己的经过验证的协议模型来更多地了解加密,以便在两个对等体之间建立安全连接.

谢谢,凯文

python encryption rsa pycrypto

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

PyCrypto会生成错误的签名

我遇到了PyCrypto的主要问题,如下面的代码所示.一个问题是测试用例不会以可重复的方式失败,但在使用不同密钥的不同平台上有不同的原因.

请注意,测试用例为Alice和Bob提供了两组密钥,第一组由OpenSSL生成,第二组由PyCrypto生成(取消注释"备用密钥"部分).

测试案例是一个简单的往返:

  1. Alice生成对称密钥并加密数据
  2. Alice用Bob的公钥加密对称密钥,然后用她的私钥签署加密密钥(在这个简单的测试用例中不使用哈希).
  3. Bob用Alice的公钥验证签名,并用他的私钥解密对称密钥.
  4. Bob用对称密钥解密数据.

以下是一些示例运行的结果:

在Linux上使用OpenSSL密钥

attempts: 1000
 success: 0
mismatch: 0
    fail: 1000
  Bad signature = 993
  Ciphertext too large = 7
Run Code Online (Sandbox Code Playgroud)

在Linux上使用PyCrypto键

attempts: 1000
 success: 673
mismatch: 0
    fail: 327
  AES key must be either 16, 24, or 32 bytes long = 3
  Ciphertext too large = 324
Run Code Online (Sandbox Code Playgroud)

在Windows上使用OpenSSL密钥

attempts: 1000
 success: 993
mismatch: 0
    fail: 7
  AES key must be either 16, 24, or 32 bytes long = 3
  Bad signature = 4
Run Code Online (Sandbox Code Playgroud)

在Windows上使用PyCrypto键 …

python pycrypto

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

Chmod 未被识别为内部或外部命令

尝试在 Windows 中安装 pycrypto。在命令提示符下,我输入 python setup.py build。事情开始时一切正常,但是当它进入“运行 build_configure”时,我收到此错误消息并且事情停止了:

chmod 未被识别为内部或外部命令

我尝试下载并安装 chmod,但这并没有改变任何东西。

有人有什么建议吗?谢谢。

chmod pycrypto

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

AppEngine上的SignedJwtAssertionCredentials无法识别PEM密钥

关于appengine的SignedJwtAssertionCredentials(使用pycrypto 2.6)不支持PKCS12格式,因此我正在尝试使用PEM密钥,正如所建议的那样.

这是我的代码:

  f = file(os.path.join(os.path.dirname(__file__), KEY_FILE), "r")
  key = f.read()
  f.close()

  credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key,
      scope="https://www.googleapis.com/auth/drive"
  http = httplib2.Http()
  http = credentials.authorize(http)
Run Code Online (Sandbox Code Playgroud)

并且KEY_FILE是一个PEM键,使用以下命令转换:

openssl pkcs12 -in privatekey.p12 -nodes -nocerts > privatekey.pem
Run Code Online (Sandbox Code Playgroud)

但我仍然得到这个错误,好像它没有认识到这是一个PEM密钥:

NotImplementedError: PKCS12 format is not supported by the PyCrpto library. 
Try converting to a "PEM" (openssl pkcs12 -in xxxxx.p12 -nodes -nocerts > privatekey.pem) or using PyOpenSSL if native code is an option.
Run Code Online (Sandbox Code Playgroud)

如果我只将文件名传递给构造函数(不读取文件的内容),则会出现同样的错误

任何的想法?

google-app-engine openssl pkcs#12 pem pycrypto

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

使用AES-CFB时Go和Pycrypto的结果不同

我在现有的python代码库中添加了一个go应​​用程序.我在处理语言之间的加密方面遇到了麻烦.这是使用go 1.2.1和Python 2.7.x/PyCrypto 2.7a1.

这是Python示例:

import Crypto.Cipher
import Crypto.Hash.HMAC
import Crypto.Hash.SHA256
import Crypto.PublicKey.RSA
from binascii import hexlify, unhexlify

#encrypt
payload =  unhexlify("abababababababababababababababababababababababababababababababab")
password = unhexlify("0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF")
iv = unhexlify("00000000000000000000000000000000")

print "IV: ", hexlify(iv), "len: ", len(iv)
print "Password length: ", len(password)


cipher = Crypto.Cipher.AES.new(
            key=password, 
            mode=Crypto.Cipher.AES.MODE_CFB, 
            IV=iv)

payload = cipher.encrypt(payload)

print hexlify(payload) #dbf6b1877ba903330cb9cf0c4f530d40bf77fe2bf505820e993741c7f698ad6b
Run Code Online (Sandbox Code Playgroud)

这是Go示例:

package main

import (
    "fmt"
    "crypto/cipher"
    "crypto/aes"
    "encoding/hex"
)

// encrypt
func main() {
    payload, err1 := hex.DecodeString("abababababababababababababababababababababababababababababababab")
    password, err2 := hex.DecodeString("0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF")
    iv, err3 := hex.DecodeString("00000000000000000000000000000000")

    if …
Run Code Online (Sandbox Code Playgroud)

python encryption go pycrypto

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