我写了一个程序,使用chrome的登录cookie自动执行某些操作,但由于Chrome在1月加密了所有Cookie,我的程序无法再运行了。
我试图通过This Topic解密cookie,并在mac os的java上取得成功,但我通常的运行环境是win7 os,所以我必须在Windows上解密它。
我在Chromium的源代码中找到了os_crypt_win.cc,它有一个加密部分:
bool OSCrypt::EncryptString(const std::string& plaintext, std::string* ciphertext) {
DATA_BLOB input;
input.pbData = const_cast<BYTE*>(reinterpret_cast<const BYTE*>(plaintext.data()));
input.cbData = static_cast<DWORD>(plaintext.length());
DATA_BLOB output;
BOOL result = CryptProtectData(&input, L"", NULL, NULL, NULL, 0, &output);
if (!result)
return false;
// this does a copy
ciphertext->assign(reinterpret_cast<std::string::value_type*>(output.pbData), output.cbData);
LocalFree(output.pbData);
return true;
}
我在java中用JNA模仿这部分:
String encrypted = bytesToHex(Crypt32Util.cryptProtectData(Native.toByteArray(plaintext), 0));
或
String encrypted = bytesToHex(Crypt32Util.cryptProtectData(plaintext.getBytes());
或
String encrypted = bytesToHex(Crypt32Util.cryptProtectData(plaintext.getBytes("UTF-8"));
或
String encrypted = bytesToHex(Crypt32Util.cryptProtectData(plaintext.getBytes("UTF-16"));
但是我得到的错误加密值与Chrome中的值存储区不同。
我是否使用了错误的方法对此进行加密,还是我错过了重要的内容?
你能帮我搞清楚吗?