delphi 如何创建/使用IBuffer?

2izufjch  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(146)

我想使用Winapi.Security.Cryptography.Core_IAsymmetricKeyAlgorithmProvider的函数,它有一个IBuffer类型的参数。我不知道如何使用IBuffer或如何向它给予数据。
我试着分配g内存并给函数一个pwide字符,但ide已经告诉我这不起作用。我在网上也没有找到任何有用的东西。

ldfqzlk8

ldfqzlk81#

Winapi.Security.Cryptography包含Windows的 Package 程序。安全性。加密。核心(Windows UWP)
请先查看此页面:https://learn.microsoft.com/en-us/uwp/api/windows.security.cryptography.core.asymmetrickeyalgorithmprovider?view=winrt-22621
有一个C#应用程序示例演示了如何使用此接口。有关IBuffer的详细信息可以在此页面上找到:
https://learn.microsoft.com/en-us/uwp/api/windows.storage.streams.ibuffer?view=winrt-22621
如果要使用RSA PKCS1加密,这可能是第一步:

uses
  System.Win.WinRT,
  Winapi.WinRT,      
  Winapi.Security.Cryptography,
  Winapi.Storage.Streams;
const
  KeyLength = 512;
var 
  objAlgProv: Core_IAsymmetricKeyAlgorithmProvider;
  data: TBytes;
  cleardata, encrypted: IBuffer;
  key: Core_ICryptographicKey;
  hs: HSTRING;
  EncryptedBase64: string;
begin
  data := TEncoding.UTF8.GetBytes('clear text');
  objAlgProv := TCore_AsymmetricKeyAlgorithmProvider.OpenAlgorithm(TCore_AsymmetricAlgorithmNames.RsaPkcs1);
  key := objAlgProv.CreateKeyPair(KeyLength);
  cleardata := TCryptographicBuffer.CreateFromByteArray(length(data), @data[0]);
  encrypted := TCore_CryptographicEngine.Encrypt(key, cleardata, nil {IV});
  hs := TCryptographicBuffer.EncodeToBase64String(encrypted); 
  EncryptedBase64 := TWindowsString.HStringToString(hs);
end;

如果你在把解决方案翻译成 Delphi 时遇到了进一步的麻烦,展示你的代码并解释你需要知道的细节。

相关问题