【发布时间】:2020-03-20 04:50:33
【问题描述】:
嗨,我正在尝试编写一个 C 程序来解密 Chrome 用来加密已保存密码的密钥。密钥用 CryptProtectData 加密,然后用 Base64 编码,我已经成功解码了密钥,现在我想用 CryptUnprotectData 解密它,但是当我尝试使用这个函数时,我的程序崩溃了,当我得到一个类似的问题保存加密数据的字节*的大小错误。有谁知道我做错了什么?
#include <stdio.h>
#include <base64.h>
#include <wincrypt.h>
void main()
{
//RFBBUEk = DPAPI
char B64[] = "BAAAA0Iyd3wEV0RGMegDAT8KX6wEAAAAYUduGi5FwQr1+XlafMqBZAAAAAAIAAAAAABBmAAAAAQAAIAAAALIvW98pXJMaQ0aJPpr40c12oSSRDg59tr+zaF+podlvAAAAAA6AAAAAAgAAIAAAAD2z5W4nMDHLOxthH8nXyxl+1hpRdY2BGHStxaDvgjSiMAAAAIKrcLbXw5WZCPjqyPtO/3QahMa0yMRC/CoMS/OoDw5j7fcZ8N31sIildXpN82egDEAAAAAvzHS7+Zf2IR05cggu1XHfNGknq3TKRHW37CVEktIHHu6yo1K0Q0r5YevYDUUNdhzlpJ+ynQUTBAS2Fa3PRR4V";
int len = sizeof(B64);
int * flen;
char * ergebnis;
ergebnis = unbase64(B64,len,flen);
DATA_BLOB Input,Output;
Input.pbData = (byte*)ergebnis;
Input.cbData = *flen;
CryptUnprotectData(&Input,NULL,NULL,NULL,NULL,0,&Output);
printf("%s",(char*)Output.pbData);
getchar();
}
【问题讨论】:
-
你是从你用来加密的同一台机器上解密的吗? stackoverflow.com/q/23201146
-
您确定 CryptUnprotectData 是您的程序崩溃所在的行吗?
-
是的,我使用加密数据的同一台机器,当我用 CryptUnprotectData 注释掉该行时,程序不会崩溃并等待我按 Enter,因为 getchar();
-
unbase64是否以某种方式为flen分配内存,因为它从未设置过它的值? (修辞,它不能)
标签: c