DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: bluewind23
今日帖子: 0
在线用户: 6
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 jzzm2006 (jzzm2006) ▲▲▲▲▲ -
普通会员
2023/11/24 22:17:00
标题:
CnPack RSA 浏览:749
加入我的收藏
楼主: 请教大家,如题,已有OpenSSL生成的Pem文件,如何通过CnVcl里的RSA.pas解密?Demo有点没看懂。
----------------------------------------------
-
作者:
男 cnpack (CnPack) ★☆☆☆☆ -
普通会员
2023/11/24 22:26:00
1楼: 用CnRSA.pas中的这个函数可以从PEM文件中读入RSA的公私钥,返回是否读取成功。

function CnRSALoadKeysFromPem(const PemFileName: string; PrivateKey: TCnRSAPrivateKey;
  PublicKey: TCnRSAPublicKey; KeyHashMethod: TCnKeyHashMethod; const Password: string): Boolean;

其中:
  KeyHashMethod: 对应 PEM 文件的加密 Hash 算法
  Password: PEM 文件如加密,此处应传对应密码
----------------------------------------------
欢迎使用CnPack IDE Wizards
http://www.cnpack.org/
作者:
男 jzzm2006 (jzzm2006) ▲▲▲▲▲ -
普通会员
2023/11/24 22:37:39
2楼:
cnpack (CnPack)


现在有公匙加密的密码,有私匙的PEM,我用那个函数能解密?
对应 PEM 文件的加密 Hash 算法 不知道,只知道是用OpenSSL生成
----------------------------------------------
-
作者:
男 cnpack (CnPack) ★☆☆☆☆ -
普通会员
2023/11/24 22:48:05
3楼: 两回事。PEM如果是被加密了,可以用我说的这个函数读取解密,从而拿到正确的公私钥,前提是密码和Hash算法要和PEM本身对上号。

只有从PEM中正确地载入了公私钥,公钥加密的内容才用私钥解密。
----------------------------------------------
欢迎使用CnPack IDE Wizards
http://www.cnpack.org/
作者:
男 jzzm2006 (jzzm2006) ▲▲▲▲▲ -
普通会员
2023/11/24 23:01:39
4楼: 我看了下,PEM没有加密。
----------------------------------------------
-
作者:
男 cnpack (CnPack) ★☆☆☆☆ -
普通会员
2023/11/25 6:23:43
5楼: 没加密更可以直接用这函数读入公私钥。加密类型和密码两个参数不传就行。
----------------------------------------------
欢迎使用CnPack IDE Wizards
http://www.cnpack.org/
作者:
男 jzzm2006 (jzzm2006) ▲▲▲▲▲ -
普通会员
2023/11/25 13:49:29
6楼: 已解决,谢谢!
----------------------------------------------
-
作者:
男 emtgao (element) ★☆☆☆☆ -
盒子活跃会员
2024/7/10 13:55:09
7楼: CnRSA,无法加解密大字符串的数据,我有一个字符串7000多字节,就无法加解密了。
----------------------------------------------
-
作者:
男 138soft (138soft) ★☆☆☆☆ -
盒子活跃会员
2024/7/10 18:22:06
8楼: RSA的加密长度必须小于密钥(Bits除以8)长度值减去11,大于长度的必须分段加密,这是标准RSA的约定。
----------------------------------------------
是你上错了车,还是我下错了站?
作者:
男 138soft (138soft) ★☆☆☆☆ -
盒子活跃会员
2024/7/10 18:24:46
9楼: unit u_WinCryptRSAUnit;

interface
uses
  Windows, Winapi.WinCrypt;

type
  PPByte = ^PByte;
  TKeyUses = (Exchange, Signature);

//每次加密的长度最大值为 (bits /8)-11
function RSAGenerateKeys(publicKey: PPByte; publicKeyLen: PDWORD; privateKey: PPByte; privateKeyLen: PDWORD; const KeyUses: TKeyUses; const bits: DWORD = 2048): Boolean;
function RSAEncrypt(publicKey: Pointer; publicKeyLen: DWORD; pContentIn: Pointer; dwContentInLen: DWORD; ppContentOut: PPointer; pdwContentOutLen: PDWORD): Boolean;
function RSADecrypt(PrivateKey: Pointer; privateKeyLen: DWORD; pContentIn: Pointer; dwContentInLen: DWORD; ppContentOut: PPointer; pdwContentOutLen: PDWORD): Boolean;

function RSASign(PrivateKey: Pointer; privateKeyLen: DWORD; pContentIn: Pointer; dwContentInLen: DWORD; ppSignatureOut: PPointer; pdwSignatureOutLen: PDWORD; const Algid: ALG_ID = CALG_SHA1): Boolean;
function RSAVerify(publicKey: Pointer; publicKeyLen: DWORD; pContentIn: Pointer; dwContentInLen: DWORD; pSignatureIn: Pointer; dwSignatureInLen: DWORD; const Algid: ALG_ID = CALG_SHA1): Boolean;

function Base64EncodeA(dest: PPAnsiChar; dlen: PDWORD; const src: Pointer; slen: DWORD): Boolean;
function Base64DecodeA(dest: PPAnsiChar; dlen: PDWORD; const src: Pointer; slen: DWORD): Boolean;

implementation
----------------------------------------------
是你上错了车,还是我下错了站?
作者:
男 cnpack (CnPack) ★☆☆☆☆ -
普通会员
2024/7/10 20:45:46
10楼: 8楼说得对。RSA不是那种对称块加密法,要加密长内容,得自己分块,没有规范。
----------------------------------------------
欢迎使用CnPack IDE Wizards
http://www.cnpack.org/
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行29.78516毫秒 RSS