我正在尝试构建一个程序,该程序接收一个文件(任意大小的EXE),对其进行加密并将其复制到一个结构中。然后稍后对其进行解密,并确保其与使用时相同。
我有一个艰难的时间加密,然后解密文件。它似乎没有正确加密,我不知道如何测试它。
以下是我的问题:
代码:
struct structData{
unsigned char * FileBuffer;
unsigned long FileSize;
//More stuff in here
};
struct Data sData;
/*
I load the data here, and fill in the data etc
*/
unsigned char Key[]={ //128bit key
0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
};
unsigned char *enc_data = malloc(sData->FileSize);//Temporary holder for the File
AES_KEY enc_key;
AES_set_encrypt_key(Key,128,&enc_key);//Put key defined here
AES_encrypt(sData->FileBuffer,enc_data,&enc_key);
sData->FileBuffer = enc_data;//This should move the stuff over
//Should be encrypted here
sData->FileBuffer = enc_data;//Copy the output to the file buffer
free(enc_data);//Free memory
AES_KEY dec_key;
AES_set_decrypt_key(Key, 128,&dec_key);
AES_decrypt(sData->FileBuffer,dec_data,&dec_key);
sData->FileBuffer = dec_data;
free(dec_data);
任何事情都会有帮助,希望我的方向是正确的,我的C语言技能有些生疏。
下面是我使用Javascript进行AES加密的示例。
直播台在这里
AES代码位于此处
我做错了什么?
好吧,这有点太开放了,不能完全回答。
从显而易见的开始,您使用的是低级的AES.*
接口,并在ECB模式下操作AES。您没有导出您的密钥。你正在硬编码一把钥匙。
看起来您还存在内存管理问题。您似乎没有在任何地方使用FileSize
。
是否有更好的库可以使用AES进行加密?
如果您打算使用OpenSSL,那么您可能应该使用EVP.*
接口,并使用经过身份验证的加密模式,如GCM。使用GCM模式,您可以获得机密性和真实性。请参阅OpenSSL wiki上的EVP认证加密和解密。
让我们说我想用另一个关键说"HelloWorld"。我能不能用这个字符串作为加密算法的参数?我必须设置密钥的正确位长度吗?如果是怎样?
您应该派生密钥,而不是直接从您的密码短语使用它。请参见OpenSSL文档中的EVP_BytesToKey(3)
和PKCS5_PBKDF2_HMAC(3)
(OpenSSL wiki没有文章或示例代码)。
...我应该坚持使用OpenSSL吗?
如果你正确地使用了这个库,那么你应该对它感到满意。
否则,您可以使用任何其他您喜欢的库。请参阅OpenSSL wiki的相关链接页面了解一些替代方案。
问题内容: 我尝试使用以下代码来加密1 GB的文件。但是Node.js中止,并显示“致命错误:JS分配失败-进程内存不足”。我该如何处理? 问题答案: 您可以将加密的文件写回到磁盘,而不是将整个内容缓存在内存中:
我正在使用这样的代码来加密文件。 但是,尽管此代码成功加密。txt和。xml文件,它不适用于其他文件类型,例如。docx或图像文件格式。我可以对代码进行哪些更改以将功能扩展到所有此类文件类型?
问题内容: 因此,我正在为自己开发一个个人项目,并且正在尝试加密手机上的文件。这些文件可以是任何文件,例如文档,照片等。现在,我正在尝试使其正常运行。每当我运行加密时,它似乎都可以正常工作并加密文件。当我运行解密时,有时它可以工作,而其他时候则不起作用。当它失败时,我通常会收到“在确定密码时出错,填充块已损坏”错误。我也没有使用不同的测试文件,所以它不像某些文件可以工作,而其他文件则不能。我每次都
首先,这是我在这里的第一个问题,我希望我能让你对这个问题有一个清晰的认识,也能帮助其他可能面临类似挑战的人!问题的标题也是最短的TL;我能得到的医生:-) 所以为了给你一点背景知识,我基本上设计了一个协议,需要通过TCP从服务器(在Node.js中实现)到设备的同步有序文件传输。流式传输文件不是一个选项,因此每个文件块都封装在一条包含其他非加密字段的消息中,这些字段超出了本问题的范围。 其中一个要
我试图在CBC模式下使用AES和Crypto++库加密(和解密)一个文件 以下是我已经做的: 为了加密文件,我以二进制模式打开它,并将内容转储为字符串: 当我将尝试解密此文件时,我如何分别提取iv和密文?IV是16字节长,但在这里我完全迷失了,我不知道如何做。
我正在尝试用AES加密一个大文件,然后解密,与原件进行比较。 这堂课总结了工作。它适用于.txt文件,但不适用于.mp3、.pdf等文件。 我们将非常感谢你的帮助。