我正在写这个问题+答案,因为我经历了很多努力(可能是因为缺乏经验),迷失了许多不同的加密/解密节点或python的方法.
我想也许我的案子可以帮助将来的人.
我需要做什么:
我选择使用AES加密.
这是我开始的方式(我不会经历我尝试过的所有事情):
我按照本页末尾的示例进行操作
在我的情况下给出了:
(这可能是javascript和coffeescript之间非常糟糕的混合)
crypto = require "crypto"
[...]
key = "mykeywhatever"
cipher = crypto.createCipher('aes192', key)
cipher.update('string i want to encode', 'binary', 'hex')
encoded_string = cipher.final('hex')
[...]
Run Code Online (Sandbox Code Playgroud)
这对我的字符串编码非常好.
然后我编写了我的python脚本来解密这个字符串,使用PyCrypto的github页面上的自述文件:
from Crypto.Cipher import AES
[...]
my_string = data_coming_from_rabbitmq
obj = AES.new('mykeywhatever', AES.MODE_CBC)
obj.decrypt(ciphertext)
[...]
Run Code Online (Sandbox Code Playgroud)
这显然不起作用:在自述文件中有一个IV,但由于我没有在节点脚本中给出一个,为什么我要在python中给一个?
经过更多的谷歌搜索,我了解到节点的Crypto使用OpenSSL,而PyCrypto显然没有.所以我调查了一下,找到了那些页面:
事情变得复杂,没有人做同样的事情来解密数据,我迷路了,并寻求帮助.
答案就是我的同事和我想出来的(好吧,主要是我的corworker).
这是我正在尝试做的事情,而且大部分时间我都是成功的:基本上我正在登录网站,然后等待一个类进入源代码,然后处理源代码.
我得到的例外:
Traceback (most recent call last):
File "foo.py", line 495, in <module>
report(login, password)
File "foo.py", line 430, in report
data = bar(login, password)
File "foo.py", line 113, in
ui.WebDriverWait(browser, 10).until(lambda browser: browser.find_elements_by_class_name("the-class-i-want"))
File "/Library/Python/2.7/site-packages/selenium/webdriver/support/wait.py", line 71, in until
raise TimeoutException(message)
selenium.common.exceptions.TimeoutException: Message: ''
Run Code Online (Sandbox Code Playgroud)
这是代码:
from selenium import webdriver
import contextlib
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.support.wait import WebDriverWait
with contextlib.closing(webdriver.PhantomJS('phantomjs')) as browser:
browser.get('mywebsite')
login_form = browser.find_element_by_id('login-form')
email = browser.find_element_by_name('login')
password = browser.find_element_by_name('password')
email.send_keys(login) …Run Code Online (Sandbox Code Playgroud)