DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: ZMskyuza
今日帖子: 24
在线用户: 7
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 flmbbb (flmbbb) ▲▲▲▲▲ -
普通会员
2024/4/28 19:58:35
标题:
OneOpenSSL 浏览:1798
加入我的收藏
楼主: OnePascel群:814696487
众所周知delphi短板各种加解密算法的实现。。。
大多只知道用openSSL调用实现,但大多人有不知道咱调用。。或者分享的极少。。
OneOpenSSL来了,基于最新的openSSL 1.1.1 进行翻译对比 实现一些常用的加解密
现在只是个开端,个人能力有限,我能写多少算多少,能翻译多少算多少。。
不喜不要喷。。。毕竟是个人没事整着玩的。。。

后面看要不要兼容SSL 3.0 大体核心和1.1.1差不多,只是多了很多算法
此帖子包含附件:flmbbb_2024428195833.rar 大小:2.50M
----------------------------------------------
-
作者:
男 a88888 (德玛西亚) ▲▲▲△△ -
普通会员
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楼: 支持楼主!感谢分享!
----------------------------------------------
-
作者:
男 fb4819 (方明) ★☆☆☆☆ -
盒子活跃会员
2024/4/29 9:03:10
4楼: 感谢楼主无私分享
----------------------------------------------
vvvvvvvvvv
作者:
男 speedbin (speedbin) ★☆☆☆☆ -
盒子活跃会员
2024/4/29 9:59:50
5楼: 支持楼主!感谢分享!
----------------------------------------------
-
作者:
男 flmbbb (flmbbb) ▲▲▲▲▲ -
普通会员
2024/4/29 10:04:53
6楼: 最新源码在此群持续更新中
----------------------------------------------
-
作者:
男 greater (绝缘电阻) ★☆☆☆☆ -
盒子活跃会员
2024/4/29 10:23:39
7楼: 十分感谢
----------------------------------------------
不变应万变
作者:
男 flmbbb (flmbbb) ▲▲▲▲▲ -
普通会员
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楼: 叫兽,你又穿越了
----------------------------------------------
为中国软件业奋斗
作者:
男 cnpack (CnPack) ★☆☆☆☆ -
普通会员
2024/4/29 16:51:33
10楼: OpenSSL十分宏大,对称加密与数字摘要等算法,入手翻译转写相对较易,但基于大数的RSA、椭圆曲线等算法就非常复杂了。
----------------------------------------------
欢迎使用CnPack IDE Wizards
http://www.cnpack.org/
作者:
男 zqznew1 (zqz123) ★☆☆☆☆ -
盒子活跃会员
2024/4/30 10:49:06
11楼: 谁实现国密 SM2,SM3,SM4等算法???
----------------------------------------------
-
作者:
男 supermay (supermay) ★☆☆☆☆ -
盒子活跃会员
2024/4/30 11:11:47
12楼: 有MD5WithRSA吗?用Openssl要等个DLL,还要对应版本的,麻烦
----------------------------------------------
链接:https://pan.baidu.com/s/12jzmECYKhGCsHBxz8tmB6w 提取码:pelr --来自百度网盘超级会员V9的分享
作者:
男 flmbbb (flmbbb) ▲▲▲▲▲ -
普通会员
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算法调用及实现
----------------------------------------------
-
作者:
男 flmbbb (flmbbb) ▲▲▲▲▲ -
普通会员
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过程,处理细节,后面在封装一个统一接口,只需传入关键信息,就好了,不需要关心细节,如何处理
此帖子包含附件:
JPEG 图像
大小:55.6K
----------------------------------------------
-
作者:
男 flmbbb (flmbbb) ▲▲▲▲▲ -
普通会员
2024/4/30 14:27:07
15楼: 基于这个库,因为这个裤我看了下,帮我省去了很多定义工作,这个库做了大量的定义工作。少DEMO 少调用过程,只是做了些定义。。。看了很多openSSL库,个人多感觉不太满意,还是自已手撸一个吧。。。一些如何调用如何保证和主流平台结果一至,还是需要特别发大量时间的,不要以为接口定义好,就行了。那只是最基本的定义。。。自已翻译了几个特别有感觉。。。有的东东半天摸不着头脑,要如何去加密,要如何解密,多是一边看C DEMO 一边查资料,把整个过程实现出来。。看了我这个DEMO ,你就知道如何去调用,如何处理数据一个一个步骤。。。我就问哪个DEMO 有像我这个这么细节的。。。展示整个过程。
----------------------------------------------
-
作者:
男 cnpack (CnPack) ★☆☆☆☆ -
普通会员
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/
作者:
男 138soft (138soft) ★☆☆☆☆ -
盒子活跃会员
2024/4/30 23:38:06
17楼: https://www.yunqa.de/delphi/products/openssl/index
源码版本2千多人民币,何必折腾呢。。。
----------------------------------------------
是你上错了车,还是我下错了站?
作者:
男 flmbbb (flmbbb) ▲▲▲▲▲ -
普通会员
2024/5/1 10:59:22
18楼: 我折腾是我的事。。。我没占用你们任何资源时间,你没叫你用或者撸。。。。何必欠我。。
----------------------------------------------
-
作者:
男 138soft (138soft) ★☆☆☆☆ -
盒子活跃会员
2024/5/1 15:17:40
19楼: 放一个SecureBlackbox Full.个人建议:对于这些涉及加密解密的东西,能不用Dll就不要用,别人随便Hook一下你的DLL,一切密钥等于零。
此帖子包含附件:138soft_202451151651.rar 大小:12.16M
----------------------------------------------
是你上错了车,还是我下错了站?
作者:
男 tony2u (tony2u) ★☆☆☆☆ -
普通会员
2024/5/2 9:30:50
20楼: 像YuOpenSSL这种使用范围不广的场景,又有几个人会来Hook你的DLL?或者说如果出了类似心脏滴血的大BUG,有能力及时修正吗?
个人建议,涉及加密场合还是使用C++,直接静态Link上OpenSSL或者libreSSL就可以了。我原来使用的是Google魔改OpenSSL维护的boringSSL,之前就吃过这方面的亏
----------------------------------------------
-
作者:
男 tony2u (tony2u) ★☆☆☆☆ -
普通会员
2024/5/2 10:20:21
21楼: 只用C++或Pascal或任何一种其他语言,其实都不是个很好的方案
FPC有个分支提供了对LLVM的支持,可以把Pascal编译成IL,而LLVM自己的Clang就可以把C++编译成IL。所以只要在需要的时候把这些IL进行直接Link,就可以打通开发语言的界限,这应该是个比较有前途的方案
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
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/
作者:
男 138soft (138soft) ★☆☆☆☆ -
盒子活跃会员
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 这种精干之美,不拖泥带水 ~
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
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;
----------------------------------------------
-
作者:
男 cnpack (CnPack) ★☆☆☆☆ -
普通会员
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应当可以用内存链表来替代吧。
----------------------------------------------
-
作者:
男 cnpack (CnPack) ★☆☆☆☆ -
普通会员
2024/5/11 9:47:44
33楼: CnTree引用了界面控件TreeView,包括VCL和FMX,当时是为了方便节点调试,允许其显示到TreeView上和界面交互。我们可以加个编译条件,将其隔离掉。

Contnrs的引用主要是TObjectList等,这个我们用得广泛了,估计去不掉。
----------------------------------------------
欢迎使用CnPack IDE Wizards
http://www.cnpack.org/
作者:
男 cnpack (CnPack) ★☆☆☆☆ -
普通会员
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
大神,剥离的好,这样就方便运用了。
----------------------------------------------
-
作者:
男 flmbbb (flmbbb) ▲▲▲▲▲ -
普通会员
2024/5/14 13:11:16
36楼: **********目前实现算法**********
MD4,MD5,FileMd5,Base64加密,Base54解密
Aes加密(CBC,ECB)
SM3加密,SM4加解密

**********更新日记**********
2021-05-14
  实现 SM3加密,SM4加解密 国密无忧

哎。有空就实现下,这东东吃力不讨好,不好玩。。。
欢迎+群  OnePascel群:814696487
此帖子包含附件:flmbbb_2024514131114.rar 大小:2.69M
----------------------------------------------
-
作者:
男 inbreak (入侵) ★☆☆☆☆ -
盒子活跃会员
2024/5/14 14:02:56
37楼: 绝对支持。。。。。叫兽粉丝。。。。报道
----------------------------------------------
我是菜鸟,己经搞了十多年了,但是我仍然很菜。
作者:
男 wfbhappy (波波) ★☆☆☆☆ -
普通会员
2024/5/15 19:16:53
38楼: 当年买这些sm国密 源码 delphi版的 都是几千 几千的花
----------------------------------------------
长兴波波
作者:
男 flmbbb (flmbbb) ▲▲▲▲▲ -
普通会员
2024/5/15 22:55:51
39楼: 楼上的Happy不,不过有用,当时无解在贵也值得。。。。没用的东东在便宜也没用。。我听人家说9000哈哈。。。。他们还在卖吗。。。要不我搞个900大放送。。真是的。。
----------------------------------------------
-
作者:
男 flmbbb (flmbbb) ▲▲▲▲▲ -
普通会员
2024/5/15 22:56:58
40楼: 这几天抽空把SM2也搞定下,后面搞一些比较恶心的,比如MD5withRsa 等各种鸟算法。。。这些支付宝或微信长用到的一些加解签名
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/16 1:11:58
41楼: 楼主牛逼,楼主威武!虽然我现在用不上这些东西,还是要赞楼主。
----------------------------------------------
-
作者:
男 cnpack (CnPack) ★☆☆☆☆ -
普通会员
2024/5/16 14:52:33
42楼: SM2椭圆曲线的理解与实现难度,和SM3/SM4完全不是一个数量级的,甚至比RSA还要复杂,估计需要多花不少时间。
----------------------------------------------
欢迎使用CnPack IDE Wizards
http://www.cnpack.org/
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行101.5625毫秒 RSS