在 C++ 中通过 cryptoapi 加密大文件
encrypting a large file by cryptoapi in C++
我正在使用 CryptoApi 加密文件(非对称加密)。一切正常,但是当文件很大时,它无法加密。我搜索了一下,发现必须逐块加密。除了最后一个块,CryptEncrypt
函数中的 Final
标志必须为 false。
我知道以上所有的概念,但我不知道如何实现它们。我的意思是我不知道如何逐块读取、加密和写入。
你能给我一个真实的代码示例吗?
更新:
试试这样的:
final_flag <- false
repeat
this_block <- read_next_block(file)
if (is_EoF(file)) {final_flag <- true }
encrypt(this_block, final_flag)
until (final_flag == true)
我对 C++ 文件系统处理的了解还不够,无法为文件末尾编写工作检查,但应该有一个。
我正在为以后会遇到这个问题的程序员写这个解决方案:
在此 link 中展示了如何加密大文件(逐块):
https://msdn.microsoft.com/en-us/library/windows/desktop/aa382358%28v=vs.85%29.aspx
注意:使用上面的代码需要做一些改动
1) 在加密中,块大小必须设置为 128 - 11 ( DWORD dwBlockLen = 128 - 11
)
2) 解密时,块大小必须设置为128 ( DWORD dwBlockLen = 128
)
均在 win 7 中测试。
我正在使用 CryptoApi 加密文件(非对称加密)。一切正常,但是当文件很大时,它无法加密。我搜索了一下,发现必须逐块加密。除了最后一个块,CryptEncrypt
函数中的 Final
标志必须为 false。
我知道以上所有的概念,但我不知道如何实现它们。我的意思是我不知道如何逐块读取、加密和写入。 你能给我一个真实的代码示例吗?
更新:
试试这样的:
final_flag <- false
repeat
this_block <- read_next_block(file)
if (is_EoF(file)) {final_flag <- true }
encrypt(this_block, final_flag)
until (final_flag == true)
我对 C++ 文件系统处理的了解还不够,无法为文件末尾编写工作检查,但应该有一个。
我正在为以后会遇到这个问题的程序员写这个解决方案:
在此 link 中展示了如何加密大文件(逐块):
https://msdn.microsoft.com/en-us/library/windows/desktop/aa382358%28v=vs.85%29.aspx
注意:使用上面的代码需要做一些改动
1) 在加密中,块大小必须设置为 128 - 11 ( DWORD dwBlockLen = 128 - 11
)
2) 解密时,块大小必须设置为128 ( DWORD dwBlockLen = 128
)
均在 win 7 中测试。