最近忙个医保平台的项目,涉及SM2/SM4的签名,验签,加密,解密的业务操作过程。毕竟现在用Delpih的人不是很多,懂这方面的技术的人也更少,能涉及密码算法的少之更少,网上也能搜到一些开源的代码,也由于使用的人少,未加通过业务系统来验证,所以存在不少Bug。
本来想省事,网上也有卖封装好的DLL的人,可对于一个老鸟级的程序员来说,是莫大的侮辱。其实想了很多办法,最终还是用原生态的pasical语言解决了SM2签名,验签,SM4加密解密的问题。
第一种解决思路:用医保中心提供的java工具,搭建签名,加密服务,用Delphi用过API调用。这个方式在实际业务中被否了,因为对于客户端的改造比较大。
第二种看有人用Delphi调用Java类的方式来实现,感觉过程太多繁琐,而且容易出错,也是一种委曲求全的办法。
第三种就是用原生的pasical来做SM2的签名和SM4的加密解密。涉及的细节比较繁琐,就不意义一一赘述,BC库的版本问题,初始化的问题,HEX,Base64,UTF8,ANsiString,Pansichar等各种类型的倒腾,最终还是通过了医保中心业务系统的调用。纯粹的pascial的处理,不使用任何第三方DLL的。
感叹,Delphi的没落,造成了使用的少,精通Delph开发这么方面的人越来越少了。所以代码的可复制性,易用性缺乏实践的检验。
发点图看看成果吧。
版权归原作者 njbudong 所有, 如有侵权,请联系我们删除。