导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2024/4/28 19:58:35
标题:
加入我的收藏
楼主:
OnePascel群:814696487 众所周知delphi短板各种加解密算法的实现。。。 大多只知道用openSSL调用实现,但大多人有不知道咱调用。。或者分享的极少。。 OneOpenSSL来了,基于最新的openSSL 1.1.1 进行翻译对比 实现一些常用的加解密 现在只是个开端,个人能力有限,我能写多少算多少,能翻译多少算多少。。 不喜不要喷。。。毕竟是个人没事整着玩的。。。 后面看要不要兼容SSL 3.0 大体核心和1.1.1差不多,只是多了很多算法
----------------------------------------------
-
作者:
2024/4/28 21:23:13
1楼:
支持楼主!感谢分享!
----------------------------------------------
-
作者:
dacsd (ddd)
★☆☆☆☆
-
盒子活跃会员
2024/4/29 8:07:01
2楼:
支持楼主!感谢分享!
----------------------------------------------
-
作者:
wfymqj (wfymqj)
★☆☆☆☆
-
盒子活跃会员
2024/4/29 8:39:46
3楼:
支持楼主!感谢分享!
----------------------------------------------
-
作者:
2024/4/29 9:03:10
4楼:
感谢楼主无私分享
----------------------------------------------
vvvvvvvvvv
作者:
2024/4/29 9:59:50
5楼:
支持楼主!感谢分享!
----------------------------------------------
-
作者:
2024/4/29 10:04:53
6楼:
最新源码在此群持续更新中
----------------------------------------------
-
作者:
2024/4/29 10:23:39
7楼:
十分感谢
----------------------------------------------
不变应万变
作者:
2024/4/29 13:12:23
8楼:
**********目前实现算法********** MD4,MD5,FileMd5,Base64加密,Base54解密 Aes加密(CBC,ECB) **********更新日记********** 2021-04-29 文件MD5算法实现 Aes加密(CBC,ECB) 算法实现 2021-04-28 MD4算法调用及实现 Base64算法加解调用及实现 2021-04-28 MD5算法调用及实现
----------------------------------------------
-
作者:
c176 (joe)
★☆☆☆☆
-
盒子活跃会员
2024/4/29 15:58:09
9楼:
叫兽,你又穿越了
----------------------------------------------
为中国软件业奋斗
作者:
2024/4/29 16:51:33
10楼:
OpenSSL十分宏大,对称加密与数字摘要等算法,入手翻译转写相对较易,但基于大数的RSA、椭圆曲线等算法就非常复杂了。
----------------------------------------------
欢迎使用CnPack IDE Wizards http://www.cnpack.org/
作者:
2024/4/30 10:49:06
11楼:
谁实现国密 SM2,SM3,SM4等算法???
----------------------------------------------
-
作者:
2024/4/30 11:11:47
12楼:
有MD5WithRSA吗?用Openssl要等个DLL,还要对应版本的,麻烦
----------------------------------------------
链接:https://pan.baidu.com/s/12jzmECYKhGCsHBxz8tmB6w 提取码:pelr --来自百度网盘超级会员V9的分享
作者:
2024/4/30 14:17:49
13楼:
国密算法openssl有,改天有空我偿试翻译下吧。。。你们说的算法openSSL多有,无非就是要有人去搞去做,把这些翻译过来。。个人觉的搞的人累的不要不要的,其它人麻烦什么。。别人多帮你搞好轮子,有DEMO 调用示例 **********更新日记********** 2021-04-30 纠正 Aes ECB算法长字符串加密错误 实现 Aes CBC,ECB解密 2021-04-29 文件MD5算法实现 Aes加密(CBC,ECB) 算法实现 2021-04-28 MD4算法调用及实现 Base64算法加解调用及实现 2021-04-28 MD5算法调用及实现
----------------------------------------------
-
作者:
2024/4/30 14:21:03
14楼:
procedure TForm1.tbAesEncodeClick(Sender: TObject); var keyBytes, ivBytes, plainBytes, cipherBytes: TBytes; i: Integer; aesKey: AES_KEY; keyLen: Integer; plainLen, Padding: Integer; tempStr: string; begin // editOut.Lines.Clear; keyBytes := TEncoding.UTF8.GetBytes(edAesKey.Text); ivBytes := TEncoding.UTF8.GetBytes(edAesIV.Text); plainBytes := TEncoding.UTF8.GetBytes(edAesInput.Text); if length(plainBytes) = 0 then begin showMessage('请输入要加密的字符串'); exit; end; SSL_InitAES(); // plainLen := length(plainBytes); Padding := AES_BLOCK_SIZE - (plainLen mod AES_BLOCK_SIZE); // 计算padding长度 if (Padding > 0) and (Padding < AES_BLOCK_SIZE) then begin setLength(plainBytes, plainLen + Padding); // 扩展明文缓冲区以容纳padding if edAesPadding.Text = 'PKCS7' then begin plainBytes[plainLen] := Byte(Padding); // 假设使用PKCS#7 padding,最后一个字节表示padding长度 for i := plainLen + 1 to length(plainBytes) - 1 do begin plainBytes[i] := plainBytes[length(plainBytes) - Padding]; // 填充padding end; end; plainLen := length(plainBytes); // 更新plainLen为包含padding的长度 end; // 设置密文长度 setLength(cipherBytes, plainLen); // 128位密钥长度 keyLen := 128; if edAeskyeLen.Text = '192' then begin keyLen := 192; setLength(keyBytes, 24); end else if edAeskyeLen.Text = '256' then begin keyLen := 256; setLength(keyBytes, 32); end else begin keyLen := 128; setLength(keyBytes, 16); end; if length(ivBytes) = 0 then begin setLength(ivBytes, 1); ivBytes[0] := 0; end; AES_set_encrypt_key(@keyBytes[0], keyLen, @aesKey); if edAesMode.Text = 'ECB' then begin i := 0; while i <= plainLen - 1 do begin AES_ecb_encrypt(@plainBytes[i], @cipherBytes[i], @aesKey, ssl_const.AES_ENCRYPT); i := i + AES_BLOCK_SIZE; end; end else begin AES_cbc_encrypt(@plainBytes[0], @cipherBytes[0], plainLen, @aesKey, @ivBytes[0], ssl_const.AES_ENCRYPT); end; tempStr := ''; for i := 0 to plainLen - 1 do begin tempStr := tempStr + IntToHex(cipherBytes[i], 2); end; edAesOut.Text := tempStr; end; demo示例帮你写的清清楚楚。。。在封装下接口出来给其它人调用,不是很简单,我的DEMO 是要展示所有调用openSSL过程,处理细节,后面在封装一个统一接口,只需传入关键信息,就好了,不需要关心细节,如何处理
此帖子包含附件: 大小: 55.6K
----------------------------------------------
-
作者:
2024/4/30 14:27:07
15楼:
基于这个库,因为这个裤我看了下,帮我省去了很多定义工作,这个库做了大量的定义工作。少DEMO 少调用过程,只是做了些定义。。。看了很多openSSL库,个人多感觉不太满意,还是自已手撸一个吧。。。一些如何调用如何保证和主流平台结果一至,还是需要特别发大量时间的,不要以为接口定义好,就行了。那只是最基本的定义。。。自已翻译了几个特别有感觉。。。有的东东半天摸不着头脑,要如何去加密,要如何解密,多是一边看C DEMO 一边查资料,把整个过程实现出来。。看了我这个DEMO ,你就知道如何去调用,如何处理数据一个一个步骤。。。我就问哪个DEMO 有像我这个这么细节的。。。展示整个过程。
----------------------------------------------
-
作者:
2024/4/30 20:11:17
16楼:
11楼,CnPack的cnvcl库中有国密SM2/SM3/SM4/SM9的完整纯Pascal实现,支持32位64位Delphi与FreePascal。 https://github.com/cnpack/cnvcl.git
----------------------------------------------
欢迎使用CnPack IDE Wizards http://www.cnpack.org/
作者:
2024/4/30 23:38:06
17楼:
https://www.yunqa.de/delphi/products/openssl/index 源码版本2千多人民币,何必折腾呢。。。
----------------------------------------------
是你上错了车,还是我下错了站?
作者:
2024/5/1 10:59:22
18楼:
我折腾是我的事。。。我没占用你们任何资源时间,你没叫你用或者撸。。。。何必欠我。。
----------------------------------------------
-
作者:
2024/5/1 15:17:40
19楼:
放一个SecureBlackbox Full.个人建议:对于这些涉及加密解密的东西,能不用Dll就不要用,别人随便Hook一下你的DLL,一切密钥等于零。
----------------------------------------------
是你上错了车,还是我下错了站?
作者:
2024/5/2 9:30:50
20楼:
像YuOpenSSL这种使用范围不广的场景,又有几个人会来Hook你的DLL?或者说如果出了类似心脏滴血的大BUG,有能力及时修正吗? 个人建议,涉及加密场合还是使用C++,直接静态Link上OpenSSL或者libreSSL就可以了。我原来使用的是Google魔改OpenSSL维护的boringSSL,之前就吃过这方面的亏
----------------------------------------------
-
作者:
2024/5/2 10:20:21
21楼:
只用C++或Pascal或任何一种其他语言,其实都不是个很好的方案 FPC有个分支提供了对LLVM的支持,可以把Pascal编译成IL,而LLVM自己的Clang就可以把C++编译成IL。所以只要在需要的时候把这些IL进行直接Link,就可以打通开发语言的界限,这应该是个比较有前途的方案
----------------------------------------------
-
作者:
2024/5/2 12:51:48
22楼:
上一次是不是又这么个事 谷歌没给钱所以安卓编译器被砍了? fpc 还是辣子?
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/ >http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
2024/5/2 15:08:42
23楼:
像YuOpenSSL这种使用范围不广的场景,又有几个人会来Hook你的DLL?或者说如果出了类似心脏滴血的大BUG,有能力及时修正吗? 个人建议,涉及加密场合还是使用C++,直接静态Link上OpenSSL或者libreSSL就可以了。我原来使用的是Google魔改OpenSSL维护的boringSSL,之前就吃过这方面的亏
所以我上面两个链接,一个是链接OpenSSL的obj,另外那个SecureBlackbox就是纯pascal代码的实现,这个库还是不错的,DEMO也很详细,关键在于一直升级,而且原来也没Openssl的心脏问题。
----------------------------------------------
是你上错了车,还是我下错了站?
作者:
lsuper (lsuper)
★☆☆☆☆
-
盒子活跃会员
2024/5/2 15:25:53
24楼:
1、以前做过对比,OpenSSL 实现 Release 有 ASM 实现也针对 CPU 优化,性能上确实优于 Delphi 同等实现(如 SHA、RSA、ECC 等多种算法) 2、所以在要求性能的场合,如 Server、加解密等建议 OpenSSL,其他一般客户端 HTTP 还是 SBB 来的方便(或者 Synapse+YuOpenSSL)。毕竟发布一个 exe 少 dll 拖油瓶,以及上面说的带 dll 容易被 api monitor 之类分析到(这点做行业应用的会有体会) 多年来一直喜欢 delphi 这种精干之美,不拖泥带水 ~
----------------------------------------------
-
作者:
2024/5/2 18:51:31
25楼:
都用到hook了,dll与exe有什么太大区别么?直接把内存一扒,什么都出来了。世上本来就没有绝对安全,关键还是看值不值得。连号称永远不会被破的D加密一样被搞,这里谁能拍胸脯保证自己能比人家专业作加密的还要牛皮的? 而且为什么会考虑到这里来??不是应该先考虑产品功能、优化以及用户体验么? 当然,楼主的钻研精神还是值得肯定的,这个属于从不同角度去看的问题。也就是到底是从产品的角度去考虑还是从研究的角度去考虑。如果要从产品的角度去考虑,那么分工是必须的,现代社会不可能一个人通吃,想要样样精只能样样都拉跨,而且效率还低。
----------------------------------------------
--
作者:
ritapl (ritapl)
★☆☆☆☆
-
盒子活跃会员
2024/5/9 9:31:18
26楼:
cnpack带的算法库已经比较全了,都是纯Pascal的,非常方便
----------------------------------------------
-
作者:
kwer (★★★★★)
★☆☆☆☆
-
普通会员
2024/5/9 10:59:13
27楼:
cnpack带的算法库还可以用到lazarus,真的要感谢cnpack团队的贡献!!!
----------------------------------------------
==========-==========-==========-==========-========== 多隆, 给我备一匹最快的马, 我有事要走先~~~ ==========-==========-==========-==========-==========
作者:
janker (janker)
★☆☆☆☆
-
盒子活跃会员
2024/5/10 11:37:22
28楼:
3.0的基本可以替代1.1.1的。1.1.1也支持SM2,SM3,SM4 cnpack的源码实现,好厉害。但是建议把源码里的ListView这个去了,基础库里带这个不好(比如用链表?)
----------------------------------------------
-
作者:
iny (盒子)
★☆☆☆☆
-
盒子活跃会员
2024/5/10 11:47:05
29楼:
请问有没有MD5WithRSA的签名函数?
----------------------------------------------
-
作者:
janker (janker)
★☆☆☆☆
-
盒子活跃会员
2024/5/10 12:24:07
30楼:
29楼:给个参考,通用摘要签名, class function TJkOpenSSLUtils.Sign_RSA(const AData, APrivateKey: TBytes; const AHashKind: THashMDKind; out ASignature: TBytes): Boolean; var LHashType: Integer; LHashLen: Integer; RSA: PRSA; BIOPrivateKey: PBIO; //PrivateKey: PEVP_PKEY; LSHAData: TBytes; Len: Integer; begin Result := False; case AHashKind of THashMDKind.MD5: LHashType := NID_MD5; THashMDKind.SHA1: LHashType := NID_sha1; THashMDKind.SHA224: LHashType := NID_sha224; THashMDKind.SHA256: LHashType := NID_sha256; THashMDKind.SHA384: LHashType := NID_sha384; THashMDKind.SHA512: LHashType := NID_sha512; THashMDKind.SHA512_224: LHashType := NID_sha512_224; THashMDKind.SHA512_256: LHashType := NID_sha512_256; else LHashType := NID_sha256; end; LHashLen := DefAttcherKeyLen[AHashKind]; //DefAttcherKeyLen: array [THashMDKind] of Integer = (16, 20, 28, 32, 48, 64, 28, 32, 32); Len := 0; BIOPrivateKey := BIO_new_mem_buf(@APrivateKey[0], Length(APrivateKey)); try //这个函数支持PCK#1和PCK#8 签名 //PrivateKey := PEM_read_bio_PrivateKey(BIOPrivateKey, nil, nil, nil); RSA := PEM_read_bio_RSAPrivateKey(BIOPrivateKey, nil, nil, nil); if RSA = nil then Exit; try if Hash(AHashKind, AData, LSHAData) then begin SetLength(ASignature, RSA_size(RSA)); Result := RSA_sign(LHashType, @LSHAData[0], LHashLen, @ASignature[0], @Len, RSA) = 1; if Result then SetLength(ASignature, Len); end; finally RSA_free(RSA); end; finally BIO_free(BIOPrivateKey); end; end;
----------------------------------------------
-
作者:
2024/5/10 22:39:45
31楼:
28楼,具体是哪个单元引用的ListView?
----------------------------------------------
欢迎使用CnPack IDE Wizards http://www.cnpack.org/
作者:
janker (janker)
★☆☆☆☆
-
盒子活跃会员
2024/5/11 1:39:56
32楼:
@Cnpack 大神,记错了,不是LISTVIEW,是LIST, 2年前看的源码。 cnTree单元,VCL引用了Contnrs,主要是用TList,FMX要引用FMX.TreeView。 看源码,cnTree主要是为CnBerUtils单元提供服务,用于x501证书的ASN.1的BER编码。 代码注释里说待修正,不知道现在什么情况。 我猜测这里的List应当可以用内存链表来替代吧。
----------------------------------------------
-
作者:
2024/5/11 9:47:44
33楼:
CnTree引用了界面控件TreeView,包括VCL和FMX,当时是为了方便节点调试,允许其显示到TreeView上和界面交互。我们可以加个编译条件,将其隔离掉。 Contnrs的引用主要是TObjectList等,这个我们用得广泛了,估计去不掉。
----------------------------------------------
欢迎使用CnPack IDE Wizards http://www.cnpack.org/
作者:
2024/5/11 17:47:50
34楼:
32楼,已经在git的最新代码中加入了ENABLE_UIINTERACT宏,以控制CnTree及其他几个相关单元对界面控件的引用,默认不定义。 另外在cnvcl根目录下加了一个GenCrypto.bat,运行它可以将密码学相关单元复制到外部cncrypto目录中生成一个独立的密码库供外界使用,以满足部分用户剥离的需要。 https://github.com/cnpack/cnvcl.git
----------------------------------------------
欢迎使用CnPack IDE Wizards http://www.cnpack.org/
作者:
janker (janker)
★☆☆☆☆
-
盒子活跃会员
2024/5/11 17:51:41
35楼:
@cnpack 大神,剥离的好,这样就方便运用了。
----------------------------------------------
-
作者:
2024/5/14 13:11:16
36楼:
**********目前实现算法********** MD4,MD5,FileMd5,Base64加密,Base54解密 Aes加密(CBC,ECB) SM3加密,SM4加解密 **********更新日记********** 2021-05-14 实现 SM3加密,SM4加解密 国密无忧 哎。有空就实现下,这东东吃力不讨好,不好玩。。。 欢迎+群 OnePascel群:814696487
----------------------------------------------
-
作者:
2024/5/14 14:02:56
37楼:
绝对支持。。。。。叫兽粉丝。。。。报道
----------------------------------------------
我是菜鸟,己经搞了十多年了,但是我仍然很菜。
作者:
2024/5/15 19:16:53
38楼:
当年买这些sm国密 源码 delphi版的 都是几千 几千的花
----------------------------------------------
长兴波波