成都市社会保险网上经办系统里面显示NHAE验签值为空是什么意思?

开发中吗我们经常要与接口打交道,无论是调取别人的接口还是给别人提供接口,如何保障在接口调用时双方数据的安全性和一致性,,这里就涉及到数据加密以及签名验证服务。本文以PHP示例讲解RSA2数据加解密和签名验签功能的实现。

我们在上一篇文章《》中介绍了非对称加密RSA2算法,它适合加密少量数据,比如支付数据等安全要求高的场景。

我们首先要生成公钥和私钥文件:

我们假设需要将用户支付信息加密后,通过接口提交给后台支付系统。用户客户端使用公钥加密数据,后台支付系统使用私钥解密数据。

我们可以将生成的公钥直接复制粘贴到代码文件中,也可以使用fopen()打开读取公钥文件。注意使用openssl_public_encrypt()加密的明文内容不能太长,太长的内容可考虑分段加密或者使用DES等方式加密。

运行后,得到加密后的内容:

后台支付系统接收到加密后的内容后,使用私钥解密。

运行后就得到解密后的数据:

首先我们要了解为什么要进行签名?我们在进行数据请求的时候,为了防止数据被人截取或篡改,造成不好的影响,所以我们在进行数据接口发送与接收的时候,需要进行签名验证。进行签名的原理是:客户端和服务端使用同样的签名算法,来计算签名,当客户端提交的签名,和服务端提供的签名一致的时候,就签名成功。

我们使用RSA2来给客户端数据签名。注意,签名方使用私钥,证明这个签名是从你这个客户端发出去的。当然验签方也就是服务端使用公钥验签。下面的示例中我们还是使用文章开始时生成的公钥和私钥。

函数openssl_sign()将支付数据进行了RS2签名,运行后得到签名:

服务端收到客户端提交的数据和签名后,使用公钥进行签名验证。

//接收客户端的原始数据

上述代码中,为了演示我给$sign$data两个变量赋值,实际上这两项值是从客户端传递过来的,一般是post提交过来的,这里代码中不做演示了,大家可以自己练习。

运行上述代码后,成功输出“ok”,即验签成功。

}

19年从互联网后端开发工程师转型为区块链工程师。一个月时间系统学习区块链技术,参与到链研发工作当中。下面来谈谈自己的学习心得,希望能够帮助到你。

关于「如何高效的自学一项新技能」,我通常分为两步走:1)搜集高质量学习材料和工具;2)应用合适的学习方法。区块链经过18、19年的火热发展后,网络上大家都能轻易的找到各种各样的高质量学习资料。此外,本问题的大部分答案都是围绕「学习什么」,因此,下文我将重点介绍「如何学习」的方法论。

一、泛读通读,建立框架,「不求甚解」

尽管区块链和其他的计算机技术没有本质上的区别,但有一个很重要的差异是,区块链技术涉及的技术面非常广。事实上,当我们把中本聪的区块链技术拆解后可发现,区块链技术是由20世纪提出的一些老技术和知识的组合而成的,换句话说,区块链的创新在于老技术的组合创新,正正体现了区块链技术的系统之美。也正是如此,区块链技术涉及知识面非常广,其中包括:分布式系统、拜占庭问题、密码学、数据结构、P2P网络等技术,以及博弈论、经济学等思想。

如果你一开始就针对某一方面孤立学习,不但无法系统化的学习,并且容易迷失在繁多复杂的新概念当中。因此,我建议的方法:以泛读通读的方式,先建立知识框架,对区块链有个大致的认识

区块链是伴随比特币而产生的,因此要搞明白区块链,首先需要了解比特币:

除此之外, 对区块链技术的演变也要有一定的了解。作为区块链 2.0的代表的以太坊是同样值得学习:

记住!你不需要一字一句全部读完,遇到不懂的概念和知识点记录下来和忽略。在这个过程中,配合搜索引擎,你需要不断的去思考和回答以下几个问题:

  • 区块链、比特币和以太坊是什么?它们的工作原理大概是如何的?比特币和以太坊的区别?
  • 它们具备什么性质?包含哪些关键的技术点?
  • 区块链的发明目的是解决什么问题?除此以外,还能解决什么问题?
  • 区块链具备什么优缺点?

完成这一步后,你已经对区块链和比特币有一个相对宏观、整体的认识,并初步建立了一个属于你自己的知识框架,此框架在后面的学习中会起到重要的作用。也许你会觉得你建立的框架并不正确和完整,但不要紧,随着你的认识加深,不断的修正和完善框架。学习本身就是一个螺旋式上升的过程。

二、从外到内,逐一突破

建立知识框架之后,下一步你需要做的就是丰富和完善它。对于第一步中遗留的那些「似懂非懂」的概念和知识点,便可以在这个环节中逐一突破。

简单来说,你要做的便是:主动学习——快速定位你存在疑惑的概念和知识点,用一切办法来攻克它。

在这个阶段中, 除了回顾上面推荐的材料以外, 你需要广泛的搜索,不局限任何的形式。高质量的搜索结果依赖于准确的问题定义,因此,在查询过程中也逐渐帮助定义清楚你的疑惑。此外,推荐两个关于区块链技术的中文社区:

当你在攻克某一个知识点和概念的过程中,你一定会遇到其他新的知识点,此时,你便可以顺藤摸瓜,把相关的知识一并学习吸收。值得注意的是, 在这个过程中需要把握好知识扩展的度,避免过度分散注意力,重点还是关注原来的疑惑本身,以目标为导向。至于如何把握,我的建议是:

  • 判断新遇到的概念是否直接影响到你理解原来的概念?若是,务必一切办法攻克它;
  • 新概念在整个框架(知识体系)中是否占有很重要的地位?还是说只是某个知识点延伸出来的小分支?比如:在你了解P2P网络时遇到新概念分布式哈希表(DHT),此概念只不过是P2P网络中用于定位特定节点或数据的一个技术手段,显然可暂时不需要深入了解;
  • 要理解新知识点的要求是否远超过当前的知识储备?若是,你也可以暂且先放一放,如:EVM原理。

重点关注的范围还是围绕区块链的工作原理相关的概念为主,如:1)如何处理交易和记账;2)如何产生区块及达成共识;如何验证和储存状态等过程中的重要概念。此外,不必过分追求技术的实现细节。

而关于如何判断是否真正理解透彻,我建议使用「费曼方法」——尝试用自己的方式,用通熟易懂的语言描述清楚。当解决完成相关的概念后,把它们重新放在框架里,不断修正和完善框架。

完成这一步后,我相信你已经对区块链及两个应用的大部分重要概念都理解通透了,如:去中心化、共识机制、工作量证明PoW、非对称加密、硬(软)分叉、双花、智能合约、Merkle Tree、51%攻击等等。

三、从点到面,构建知识网络

进入第三部以后,你的区块链技术算是入门了。基于你所建立的框架,你已经有能力去理解之前晦涩难懂的概念。接下来,你便可以进一步扩大区块链技术的广度和深度,如:

当你学习上述新的知识的过程中,你需要刻意的去思考和构建知识间的「联系」——此知识和别的知识有什么关系?是如何关联一起的?

知识的本质永远不是信息本身,而是信息之间的联系。正是这种联系,涌现出了超越单个信息点总和的「系统性」。

而区块链技术的创新本身也恰恰是「系统性」。

在这个过程中,我主要的使用的

  • 对比。将解决同一个问题的不同技术手段归纳整理在一起,多维度进行对比,找出共性和异性。比如:PoW与PoS之间的区别?

分类。目前解决区块链的可行性方案有哪些潜在的研发方向?具体有哪些技术手段?

  • 提炼。尝试用最精炼的语言貌似一类相关的知识点,比如比特币的核心原理:
中本聪使用非对称加密解决电子货币的所有权问题;用区块时间戳解决交易的存在性问题;用分布式账本解决剔除第三方结构后交易的验证问题;用工作量证明和最长链约定来保证节点状态的一致性,已解决「双花」问题。
  • 架构。尝试对系统中的关键模块和模块间的关系进行抽象,并绘制成架构图,如:区块链的分层架构。
  • 流程。也可以将根据信息流将不同的知识点串联在一起,绘制成流程图。如:以太坊交易打包流程。
以太坊交易打包流程,来源:CSDN

总之,你需要想尽一些的办法,将知识点关联在一起,逐渐结构化、系统化。

四、实践是检验真理的唯一标准

到这一步后,你掌握的区块链技术的知识体系逐步成型,接下来需要做的便是将技术落地到应用中。

首先,尝试在本地搭建比特币、以太坊的测试网络,和做不同类型的交易交易。对于以太坊,你还可以部署和调用智能合约等等。

开始编写更加复杂的Dapp应用:

在此环节,你的主要目标是熟悉并掌握开发Dapp的相关技能和工具。

最后一步,选择一个你感兴趣的项目,阅读它的源码,了解底层技术的实现原理,将理论与实践进一步融会贯通。关于项目的选择,我个人建议是以太坊,至今为止,以太坊的应用面还是最广的,受到各大互联网公司的青睐。

至于如何阅读和学习以太坊的源码,个人建议结合以太坊的黄皮书对比阅读学习。可参考:

区块链行业真处于高速发展的时候,作为区块链从业人员,不仅仅要掌握技术,还需要时刻掌握行业动态,挖掘其他有价值的项目,把握认知变现的机会。

希望以上答案可以对你有所帮助!

}

我要回帖

更多关于 社保获取系统业务年度错误 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信