Delphi 使用CryptoAPI加密Winsock通信
我从Microsoft MSDN中找到了CryptoAPI,用于加密基本网络应用程序的客户端和服务器之间的通信。(只是为了了解如何保护网络通信) 我决定在CBC中使用AES 256bit密码进行数据包加密,使用RSA 2048bit发送/接收AES对称密钥 我已经阅读了许多示例,甚至成功地使用此库编写了一些代码片段,例如:Delphi 使用CryptoAPI加密Winsock通信,delphi,encryption,aes,cryptoapi,Delphi,Encryption,Aes,Cryptoapi,我从Microsoft MSDN中找到了CryptoAPI,用于加密基本网络应用程序的客户端和服务器之间的通信。(只是为了了解如何保护网络通信) 我决定在CBC中使用AES 256bit密码进行数据包加密,使用RSA 2048bit发送/接收AES对称密钥 我已经阅读了许多示例,甚至成功地使用此库编写了一些代码片段,例如: 使用AES加密/解密Unicode字符串 使用AES加密/解密流 这两个代码段工作得很好,并且非常容易编写 现在我想动态加密/解密任何静态字节数组(来自我的服务器或客户端
- 使用AES加密/解密Unicode字符串
- 使用AES加密/解密流
我如何在不使用第三方组件/包的情况下为Winsock通信实时加密/解密数据?仅使用CryptoAPI?您只需要进行一些调试。看起来您放弃得太快了。不应移动(数据^,目标[0],缓冲区大小);是否移动(数据^,@dest[0],缓冲区大小)?
function AES(const data : Pointer; var dest : TBytesArray; bufferSize : DWORD; Key : String; doCrypt : Boolean) : Boolean;
var AES : HCRYPTPROV;
hKEY : HCRYPTKEY;
begin
CryptAcquireContext(@AES, nil, nil, PROV_RSA_AES, 0);
try
hKey := AES_DeriveKeyFromPassword(AES, key);
try
SetLength(dest, bufferSize);
Move(data^, dest[0], bufferSize);
if NOT CryptEncrypt(hKey, 0, true, 0, @dest[0], @bufferSize, bufferSize) then showmessage(inttostr(getlasterror()));
finally
CryptDestroyKey(hKey);
end;
finally
CryptReleaseContext(AES, 0);
end;
end;