delphi 使用CnPack 组件包(CnVCL)加密控件实现RSA2 SHA256 2048位签名

procedure TFormRSA.RSASHA256SignAndVerify(const PrivateKeyFile, PublicKeyFile: string);
var
  PrivateKey: TCnRSAPrivateKey;
  PublicKey: TCnRSAPublicKey;
  Data, Signature: TBytes;
  DataStr: string;
  IsValid: Boolean;
begin
  // 初始化 RSA 密钥对象
  PrivateKey := TCnRSAPrivateKey.Create(True); // 使用 CRT 加速
  PublicKey := TCnRSAPublicKey.Create;
  try
    // 从本地文件加载私钥
    if not CnRSALoadKeysFromPem(PrivateKeyFile, PrivateKey, nil) then
    begin
      Memo1.Lines.Add(Format('Failed to load private key from file:%s ', [PrivateKeyFile]));
      Exit;
    end;
    Memo1.Lines.Add('Private key loaded successfully.');

    // 从本地文件加载公钥
    if not CnRSALoadPublicKeyFromPem(PublicKeyFile, PublicKey) then
    begin
      Writeln('Failed to load public key from file: ', PublicKeyFile);
      Exit;
    end;
    Memo1.Lines.Add('Public key loaded successfully.');

    // 要签名的数据
    DataStr := 'Hello, RSA-SHA256!';
    Data := TEncoding.UTF8.GetBytes(DataStr);

    // 使用私钥对数据进行 SHA256 签名
    Signature := CnRSASignBytes(Data, PrivateKey, rsdtSHA256);
    if Length(Signature) = 0 then
    begin
      Memo1.Lines.Add('Failed to sign data.');
      Exit;
    end;

    // 输出签名
    Memo1.Lines.Add('Signature length: '+IntToStr( Length(Signature)));
    try
     // Base64编码签名结果
  var   SignBase64 := TNetEncoding.Base64.EncodeBytesToString(Signature);

  Memo1.Lines.Add('Signature: '+ SignBase64 );
    except
      on E: Exception do
        Memo1.Lines.Add('Error in BytesToHex: '+ E.ClassName+ ': '+ E.Message);
    end;

    // 使用公钥验证签名
    IsValid := CnRSAVerifyBytes(Data, Signature, PublicKey, rsdtSHA256);
    if IsValid then
      Memo1.Lines.Add('Signature is valid.')
    else
      Memo1.Lines.Add('Signature is invalid.');
  finally
    PrivateKey.Free;
    PublicKey.Free;
  end;
end;

CnPack是什么? CnPack是一个仍在筹划开发中的Delphi第三方开发包:-) ,它的全称是 CnPack For Delphi 开发包。 与一般的控件包不同的是,CnPack开发包除了包括大量的组件外,还包括用于IDE扩展的专家包、大量的通用窗体库、数据桌面、组件编写工具等辅助开发工具,以及一个版本控制系统等等与Delphi软件开发相关的代码、文档和程序。 CnPack由网上的自愿者们组成的CnPack开发组制作,是一个典型的网上合作开发项目。 CnPack是一个完全符合GPL LGPL协议的自由程序库。 CnPack开发组将用2002年全年甚至更长的时间来完成这一开发计划。 为什么要开发CnPack呢? Delphi以其完全开放的VCL体系吸引了很多的程序员,通过使用第三方的代码和控件,可以极大的提高软件开发效率。然而,在大量的优秀控件中,由中国程序员制作的却少得可怜。除去商业控件包不说(恕小弟识浅,哪朋友见过国产的商业控件包吗?),国内有多少控件包可以和RxLib、GExpert、FastReport、FlatStyle等这些免费、共享包相提并论?CnPack的计划就是集中大家的力量制作一个真正优秀的大型开发包,同时提供大量的代码和文档让Delphi程序员参考和学习。我想,不需要我做太多解释,大家也能理解开发CnPack的意义:1、对程序员用户而言,首先,开发包所有文档、注释都将使用中文编写,这对很多E文不好的程序员来说绝对是一件好事。其次,技术支持和学习交流将变得方便,有多少人可以从国外获得控件包的技术支持呢?当然,前面两点国产优势都是次要的,CnPack的设计目标是一个真正功能强大、实用的开发包,能帮助程序员更方便地做出好的软件。 2、对开发人员而言,通过开发,可以对Delphi的系统结构有更深的认识,并从中学到大量的经验和技巧,而多人协作开发的经验亦是非常有用。更重要的是,我们将以自己的实际行动证明,中国的Delphi程序员并不比外国的差。CnPack包括些什么内容? 在开发计划中,CnPack包括了Delphi程序设计相关的很多方面:不可视工具组件包。 用户界面控件包。 符合中国人使用习惯的数据库、报表组件包。 网络通讯组件包。 本地化、扩展的属性、组件编辑器。 IDE扩展专家工具包。 CnVCS版本控制系统。 本地化、功能强大的数据桌面、资源编辑器、组件编写工具等辅助开发工具。 大量可重用的窗体模板库。 而在正式的开发中,将根据具体情况进行调整,详细的内容参见开发资料中相应部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值