问题标签 [pycrypto]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
5962 浏览

python - How to store a crypto key securely?

I'm looking at using a crypto lib such as pycrypto for encrypting/decrypting fields in my python webapp db. But encryption algorithms require a key. If I have an unencrypted key in my source it seems silly to attempt encryption of db fields as on my server if someone has access to the db files they will also have access to my python sourcecode.

Is there a best-practice method of securing the key used? Or an alternative method of encrypting the db fields (at application not db level)?

UPDATE: the fields I am trying to secure are oauth tokens.

UPDATE: I guess there is no common way to avoid this. I think I'll need to encrypt the fields anyway as it's likely the db files will get backed up and moved around so at least I'll reduce the issue to a single vulnerable location - viewing my source code.

UPDATE: The oauth tokens need to be used for api calls while the user is offline, therefore using their password as a key is not suitable in this case.

0 投票
2 回答
313 浏览

windows - PyCrypto 未在 Windows 服务器 2008 上使用 mod_wsgi 加载

我在 Windows 2008 Server 64 位上设置了一个项目,使用 Apache 2.2、mod_wsgi 3.3、django 1.2 和 python 2.7(32 位)。

我已经使用 VoidSpace 上的安装程序安装了 PyCrypto 2.3(用于 32 位 python 2.7): http ://www.voidspace.org.uk/python/modules.shtml#pycrypto

当我尝试通过解释器导入 PyCrypto 模块时,它运行良好。然后我使用以下命令运行 Django 服务器:manage.py runserver

这也按预期执行,CSS 和其他静态图像未正确显示,但站点运行正常。

当使用 mod_wsgi 和 Apache 时,我得到了一个导入错误,以及 DLL 加载失败的注释。

完整的堆栈跟踪已发布在 pastebin 上:http: //pastebin.com/hav7sqB0

我使用 DependencyWalker 查看可能丢失的依赖项,并下载了所有似乎丢失的 DLL。然后将它们复制到 System32 windows 目录和 SysWOW64 目录。

DependencyWalker 应用程序现在仅显示“延迟”依赖错误,但没有阻止功能。

我确实看到了相关问题: 为什么没有使用 MSVC 构建的 Python DLL 使用 mod_wsgi 加载?

但是,正如我之前所说,使用 VoidSpace 安装程序安装并不能解决问题。

我曾尝试使用 MinGW32 进行编译,但我收到错误消息,指出它不知道如何在“nt”操作系统上编译。

0 投票
0 回答
450 浏览

python - 将使用 pycrypto 2.0.1 保存的 RSA 公钥导入到较新的版本中

我有一个使用 PyCrypto 2.0.1 生成的腌制 RSA 公钥。我正在寻找升级我的应用程序以使用 PyCrypto 2.5。

pickle 密钥数据以 iCrypto.PublicKey.RSA\nRSAobj_c 开头

不幸的是,RSAobj_c 在 PyCrypto >=2.1 中被删除,因此去酸洗失败。

我应该如何使密钥与新的 PyCrypto 兼容?

0 投票
2 回答
1731 浏览

python - pycrypto 和 python 2.4.3 问题

我正在做一个项目,而雇主提供给我的 cPanel 正在使用python 2.4.3(版本太旧)。问题是我需要使用pycrypto. 所以我正在进口SHA256。问题在这里 SHA256.py:

hashlib在 python 2.4.3 中不可用,所以它去导入_SHA256但文件夹中没有 _SHA256 Cryto.Hash。这是pycrypto的错误吗?或者我不能在 python 2.4.3 中使用这个模块??这个问题的任何解决方法?

0 投票
1 回答
674 浏览

python - 嵌套导入错误

运行python version 2.4.3。我正在使用python-amazon-product-api。但是在api.py以下代码行中导致问题:

由于我的版本是 2.4.3 它进入else并尝试导入Crypto. 所以我下载了它,但在 SHA256.py 中出现导入错误cannot import _SHA256。库中没有 _SHA256.py。经过我所有不成功的努力,我放弃使用 pyCrypto 并尝试使用独立的 hashlib 库。所以我修改else了部分api.py

然后在导入 hashlib 时再次出现此导入错误。

我昨天发布了类似的问题,但找不到确切的解决方案,这就是我再次发布此问题的原因。我迫切需要一个解决方案:(

0 投票
1 回答
554 浏览

python - 在 python 2.7 中使用 pycrypto appengine

保护需要在 Google Appengine 中的代码中使用的对称密钥的最佳方法是什么?

我们的应用程序使用 Python 2.7

编辑:我们有一些我们想要保护的数据库字段,需要在代码中访问,但没有理由将它们以纯文本形式留在数据库中。显然,我想让检索密钥变得尽可能困难(理解这绝不是不可能的)。

0 投票
1 回答
2898 浏览

javascript - crypto-js 和 pycrypto 中的 AES 问题

我尝试实现之间的通信

  • crypto-js(一个 javascript 加密库)

  • pycrypto(一个 python 加密库)

python 服务器端iv,我使用 an和 a加密一个字符串,passphrase并将带有加密文本 base64 编码的 iv 发送到javascript 客户端。然后我想要decrypt用户可以输入的带有密码的字符串。

蟒蛇 - 服务器

javascript - 客户端

在这个例子中,我得到一个 javascript 错误

但这只是一个例子——我尝试了所有我能想到的 base64 编码/解码。我也尝试改变模式。但这些都是随机测试,我想了解我真正要做的事情。

  • crypt-js 想要什么编码?
  • 我应该选择哪种模式?
  • python服务器端有什么我应该改变的吗?
  • 什么是填充?会不会有错?
  • 您可以推荐任何其他 javascript 库吗?

非常感谢和亲切的问候,武士

0 投票
1 回答
6219 浏览

javascript - 在 PyCrypto AES MODE_CTR 中包含 nonce 和块计数

一些背景信息,你可以跳过这部分的实际问题

这是我在stackoverflow上关于这个主题的第三个问题。完整地说,这些是AES with crypt-js and PyCryptoMatch AES de/encryption in python and javascript的其他问题。不幸的是,我最后一次尝试对原始问题投了两次反对票。问题是,即使我不知道我真正的问题是什么。我只是四处寻找我正在寻找的真正问题。有了评论中的反馈,并阅读了一些额外的信息,我更新了我的问题。我认为我挖掘了正确的问题。但是我的问题在我更新后没有得到更多的意见。所以我真的希望这个问题现在更加清晰易懂 - 即使我知道我现在的问题是什么:D
感谢大家为这个很酷的社区制作 stackoverflow - 我经常在这里找到解决我的问题的方法。请继续对不好的问题提供反馈,以便改进和更新它们,从而增加这个庞大的知识和解决方案数据库。并随时纠正我的英语语法和拼写。

问题

Javascript 中的 AES

我有一个加密的字符串,我可以用这个AES 256 CTR 模式的 Javascript 实现来解密它

这会解密我的字符串并This is a test Text弹出警报框。

AES 与 PyCrypto

现在我想用python 和 PyCrypto解密这个字符串

此代码不运行。我得到一个ValueError: AES key must be either 16, 24, or 32 bytes long. 当我认识到我必须在 PyCrypto 中做更多事情然后调用一个解密方法时,我开始调查并试图弄清楚我必须做什么。

调查

我首先想到的基本事情是:

  • AES 256 位 (?)。但是 AES 标准是 128 位的。将密码增加到 32 字节就足够了吗?
  • 计数器模式。使用 AES.MODE_CTR 在 PyCrypto 中轻松设置。但我必须指定一个 counter() 方法。所以我使用了PyCrypto 提供的基本二进制计数器。这与 Javascript 实现兼容吗?我无法弄清楚他们在做什么。
  • 该字符串是 base64 编码的。不是什么大问题。
  • 填充一般。密码和加密字符串。

对于密码,他们这样做:

然后我在python中做了这个

但这并没有帮助。我仍然得到一个? A???B??d9= ,?h????'带有以下代码的奇怪字符串

然后我阅读了有关 Javascript 实现的更多信息,它说

[...] 在这个实现中,初始块在前 8 个字节中保存随机数,在后 8 个字节中保存块计数。[...]

我认为这可能是解决问题的关键。所以我测试了当我在 Javascript 中加密一个空字符串时会发生什么:

警告框显示/gEKb+N3Y08=(12 个字符)。但是为什么是12?不应该是 8+8 = 16Bytes 吗?好吧,无论如何,我通过使用and or测试解密来尝试对 python 解密的蛮力方法。我知道这是一次非常尴尬的尝试,但我越来越绝望。它也没有工作。for i in xrange(0,20):ciphertext[i:]base64.b64decode(ciphertext)[i:]

未来的前景也是以同样的方式实现加密。

附加信息

加密的字符串最初不是用这个 Javascript 实现加密的,它来自另一个来源。我刚刚认识到,Javascript 代码做了正确的事情。所以我肯定这种实现有点像“标准”

问题

我能做些什么,使用 PyCrypto 对字符串进行加密和解密与 Javascript 实现中的相同,以便我可以在 Javascript 和 Python 之间交换数据?如果您可以建议另一个,我也会切换到 python 中的另一个加密库。此外,我对任何类型的提示和反馈都很满意。

而且我认为,一切都归结为如何将随机数和块数包含到加密字符串中?以及如何提取此信息进行解密?

0 投票
1 回答
21675 浏览

python - 如何设置 CFLAGS 和 LDFLAGS 来编译 pycrypto

我正在尝试将结构库安装到旧机器上。/usr/lib 中有一些遗留库,例如 libgmp。

我在 $HOME/app 中编译了 libgmp 5.x,然后尝试安装 pycrypto(它是 fab 的依赖项):

我观察到我的 include 或 lib 目录都不在编译/链接选项中:

如何正确分配 CFLAGS 和 LDFLAGS 以进行构建pycrypto


我尝试下载 pycrypto-2.5 并安装它:

没有设置 CFLAGS 或 LDFLAGS。可能是 pycrypto-2.5 出错了?

0 投票
1 回答
12231 浏览

python - PyCrypto:仅使用文件中的公钥解密(无私钥+公钥)

大家好。

我正在尝试使用 RSA 公钥和私钥以及PyCrypto的加密/解密,我遇到了一个对我来说似乎有点奇怪的问题(它现在的工作方式可能很有意义,但我没有对 RSA 非对称加密知之甚少,这就是为什么它让我感到困惑)。这是我遇到的无法解密只有公钥的东西。

事情是这样的:我有一个服务器和一个客户端。我希望服务器“识别”并注册客户端并将其显示在“已知设备”列表中。客户端将拥有服务器的公钥,而服务器将拥有客户端的公钥,因此当客户端与服务器通信时,它将使用其客户端的私钥和服务器的公钥对其数据进行加密。通过这样做,只有正确的服务器才能打开数据(使用它的私钥),并且能够验证发送者实际上是声称是......好吧......或者至少是这样的客户端我怎么想,因为我是这种非对称加密的新手。这个想法是,当其中一个客户端醒来时,它将发送其公钥(当然,使用服务器的公钥加密,但那嘿,我是新客户,这是我的公钥。使用我的 UUID 注册该密钥“服务器将服从,将该公钥与客户端的 UUID 相关联,并使用该密钥解密来自该客户端的数据。我只想传输客户端的公钥,保持其私钥秘密,秘密,秘密(这是私人的,对吗?)

我正在使用openssl和使用PyCrypto的非常简单的Python脚本进行一些测试(实际上,即使在服务器/客户端架构或任何东西中......只是试图用私钥加密某些东西并用公钥解密它)

首先,我创建了一个公钥/私钥集:

好的,第一件事让我有点困惑......它只生成一个文件,带有私钥和公钥......嗯......好吧......无论如何。我可以使用以下方法提取公钥:

所以我想我有我的一对私人(私人+公共,实际上)和公共密钥分别在~/myTestKey.pem~/myTestKey.pub。嗯......显然我做错了什么,因为PyCrypto不喜欢这个程序集。我不知道为什么。

我有两个非常简单的测试脚本,“ encryptor.py”和“ decryptor.py”。“ encryptor.py”应该用私钥加密一些东西,“ decryptor.py”用公钥解密。我知道...我是创意的典范...

所以,我用我的“ ”(用私钥)加密字符串“ Loren ipsum ”:encryptor.py

------------ 加密器.py ----------------


它工作正常。嗯......我想是这样,因为在文件中“ /tmp/cryptThingy.txt”我得到了很多乱码。对我来说,它看起来真的非常加密。

但是,当我尝试仅使用仅包含公钥的文件对其进行解密时...

----------- 解密器.py ---------------


... PyCrypto对我大喊大叫:

是的,当然不可用!我提取了公钥!我花了 2 个小时才找到正确的方法!!

我错过了什么?正如我所说,我在这个公共/私有非对称密钥加密方面是个新手,所以我可能有一个核心“概念错误”......任何提示将不胜感激。

先感谢您!