我写了一个程序使用Chrome的登录cookie自动执行某些操作,但自从Chrome在1月份加密所有cookie以来,我的程序就无法工作了。
我正在尝试解密cookie,并成功地在mac os上使用Java通过该主题进行解密,但我通常运行的环境是Win7操作系统,所以我必须在Windows上进行解密。
我在Chromium的源代码中找到了os_crypt_win.cc,其中包含一个加密部分:
我正在尝试解密cookie,并成功地在mac os上使用Java通过该主题进行解密,但我通常运行的环境是Win7操作系统,所以我必须在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;
}
我使用JNA在Java中模仿了这个部分:
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中存储的值不同。
我使用了错误的加密方法,还是我错过了重要的东西?
你能帮我解决这个问题吗?