在日常的接口交互中,数据的安全性是优先考虑的问题之一。那么一般我们在实际工作中如何去保证数据的安全呢?一般是通过数据加密的方式来处理。加密算法,如果按是否可以把密文还原成明文来划分的话,可以分为可逆加密和不可逆加密。
一、基础概念
1、密钥
密钥是一段二进制的字符串,其度量单位是位(bit)。对于密钥长度为256的话,就是指32个字节长度的密钥。
2、身份验证
在非对称加密模式下,使用私钥进行加密,对方用公钥进行解密,接收方如果能把信息成功解密出来,即可确定信息的来源方是私钥拥有者,达到身份验证的效果。
3、信息的完整性
信息完整性是指接收方收到的信息没有被篡改过。
二、可逆加密
在可逆加密分为对称加密和非对称加密两大类。对称加密是指加密和解密的密钥是同一个密钥,而非对称加密则需要使用两把不同的密钥进行。
1、对称加密

如上图,用户A通过对称加密算法,对要传输的消息的明文(plain text)进行加密(encrypt)得到密文(cihger text)。用户B得到密文信息后,用同一把密钥对密文进行解密(encrypt)操作,当然也需要用同一种加密算法,最后得到消息的明文。
常见的对称加密算法主要有AES,其密钥长度128,192,256这几种是最常见的。
2、非对称加密

如图,非对称加密和解密是需要使用两个不同的密钥,其中公钥是可以提供给通信方,我们自己保管好私钥。
非对称加密方式,用公钥加密的话得用私钥来解密,反之亦然。在正式场景中,一般是有两套密钥,一套是接入方密钥,一套是平台方密钥。在进行对接的时候,双方会把自己的的公钥通过邮件等正式方式发给对方,并商议确定加密规则(包括使用的加密算法、公私钥的使用规则等,一般都是平台方制定)
常用的非对称加密算法是RSA。
3、混合加密
| 优点 | 缺点 | |
| 对称加密 | 运算速度快 | 密钥被窃取后,消息会被破解 |
| 非对称加密 | 采用私钥自行保管、公钥任意分发的模式,黑客只要没有私钥就无法破解整个加密流程 | 运算速度慢,满足不了时效要求高的业务场景 |
可见,对称和非对称加密各有优缺点,我们把它们混合使用来进行加密,则可以更好地发挥效果。
1、首先,使用非对称加密的方式把密钥传给对方
对称加密被破解的关键是黑客拿到拿到密钥,所以我们可以通过非对称加密方式把密钥加密,然后对方拿到后解密即可。
2、使用对称加密方式进行后续信息交互。
三、如何确保信息的完整性
实现信息完整性的手段一般是应用摘要算法,也叫散列函数或者哈希函数。它主要是通过任意长度的字符串通过hash函数,变成固定长度的字符串。这个固定长度的字符串也被称为数字指纹或者摘要。
1、摘要算法的四大特点:
1)不可逆
不需密钥,只需使用算法即可加密,但是密文不能被解密。可用于加密用户密码,在存储在数据库中。
2)难题友好性
破解手段,只能是暴力枚举,需要消耗大量的算力。
3)发散性
明文进行非常小的改动,得到的摘要就会发生剧烈的变化(抖动)。
4)抗碰撞性
摘要算法会把不同长度的字符串变成相同长度的摘要,如果这些发生重复,那么就成为发生了碰撞。好的算法要求尽可能避免碰撞。
在常见的摘要算法中,MD5、SHA1不具备很强的抗碰撞性,因此目前主流使用SHA2(包括SHA224、SHA256、SHA384)算法。
2、实际应用流程
虽然摘要具有不可逆性,但是应对黑客拦截请求、替换原文内容并生成新的摘要,这种情况接收方是无法感知的。那么解决这个问题,可以对摘要进行加密传送。

整个流程主要围绕对摘要进行加密成数字签名,然后附在原文后面一起传送给接收方。接收方收到请求后,把签名通过发送方的公钥进行解密得到摘要信息,并与按原文生成的摘要进行比对,如果一致则说明请求没被篡改过。
3、进阶:数字证书及https应用
数字签名,对机密性普通程度的信息来说已经基本够用了,但是对于安全性很高的信息传播来说,还是会有一定问题的。
比如,接收方得到的发送方的公钥有可能是给人恶意替换了的。比如拿到的公钥被黑客替换了成自己的公钥。那么黑客就可以根据上述数字签名的方式发送自己的请求来欺骗接收方的数据。那么这时候就可以用数字证书来解决。
数字证书,就是让权威的CA机构为证书所有者的公钥进行背书。其使用可以理解为在数字签名的基础上加一层CA的签名验证。正规的CA,其公钥都会保存到操作系统里面,方便使用。如果证书由不正规的CA发布,那么在验证的过程中,会得到警告。
3.1、数字证书(Digital Certificate)的申请
机构A向CA提交数字证书申请,要提交自己的公钥给CA。CA创建数字证书信息,并通过摘要算法把证书原文生成摘要,并利用自己的私钥对摘要进行加密得到数字签名。然后把签名放到数字证书里面,最后生成机构A的数字证书。数字证书的生成流程,类似数字签名,生成的证书就可以发送给机构A来使用了。
3.2、数字证书的使用
当机构A得到数字证书后,就可以把数字证书和原文一起放到请求数据里面,然后发送数据。
接收方接收到数据后,会进行以下几步操作:
1)验证CA的数字签名
首先,从数据中取出CA的数字签名,并用CA的公钥对其进行解密,得到摘要信息
然后,把请求原文数据按摘要算法生成摘要信息
最后,对比两个摘要的一致性,如果一致,则说明请求是可信任的,并从证书中拿出机构A的公钥
2)验证机构A的数字签名
首先,利用上一步里面得到的机构A的公钥对其进行解密,得到摘要信息
然后,把请求原文数据按摘要算法生成摘要信息
最后,对比两个摘要的一致性,如果一致,则说明请求是可信任的
3)读取原文信息并使用
3.3、数字证书的一个典型的应用场景-https协议
https协议就是数字证书的一个使用场景。是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。
其关键点在于浏览器向https网站发送加密请求并得到证书,然后通过验证后提取网站的公钥,接下来就可以与服务器交换加密信息了。

四、总结
在通讯过程中,保持数据的机密性和完整性是非常重要的。数据机密性可以靠可逆加密算法了完成,考虑到对效率和安全的平衡,一般建议使用对称加密和非对称加密进行混合使用。
在传说过程中,请求数据有可能给黑客进行拦截和篡改,破坏数据的完整性。常见的处理手段是使用数字签名和数字证书。
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co