一、公钥加密
假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。
我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用
数字2,就是我的私钥,来解密。这样我就可以保护数据了。
我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥,
只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。
二、私钥签名
如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知
道我的公钥是1,那么这种加密有什么用处呢?
但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他
解密看是不是c。他用我的公钥1解密,发现果然是c。
这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。
这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名。
总结:公钥和私钥是成对的,它们互相解密。
公钥加密,私钥解密。
私钥数字签名,公钥验证。
举例
比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:
- Bob将他的公开密钥传送给Alice。
- Alice用Bob的公开密钥加密她的消息,然后传送给Bob。
- Bob用他的私人密钥解密Alice的消息。
上面的过程可以用下图表示,Alice使用Bob的公钥进行加密,Bob用自己的私钥进行解密。
例子和图出自《网络安全基础 应用与标准第二版》
RSA算法
RSA 公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够 抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对 其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
原文:http://blog.csdn.net/21aspnet/article/details/7249401#
相关推荐
6. 压缩包中的`signature`文件可能包含的是一个示例程序,演示了如何在Java中使用RSA进行签名、验签、加密和解密。这个程序可能会包括以下关键部分: - 导入必要的安全库 - 创建并初始化`KeyPairGenerator` - ...
OpenSSL 1.1.1 新特性: 全面支持国密SM2/SM3/SM4加密算法,最近的项目涉及到国密,又局限于资源有限,只能只能上了。
总结一下,C#中处理RSA密钥文件,如pfx和cer,以及进行签名、验签、加密和解密,主要依赖于`System.Security.Cryptography`命名空间。此外,为了实现C#和Java之间的公钥私钥互转,我们需要理解不同的密钥表示形式并...
在涉及到安全通信时,VerSign签名、验签以及加密解密就显得至关重要。这些技术确保了数据在传输过程中的完整性和安全性。 XML签名是一种标准(RFC 3075),它提供了验证XML文档完整性和来源的方法。通过XML签名,...
7. **工具类设计**:`RSAHelper.cs`和`CertificateUtils.cs`很可能是提供各种RSA相关功能的工具类,如加载密钥、签名验签、加密解密等。`CertificateUtils`类很可能专注于处理证书相关的操作,而`RSAHelper`可能包含...
这些代码演示了.NET与Java间如何正确地进行RSA签名验证和加密解密。确保在实际应用中,安全地处理和存储密钥,遵循最佳实践,以防止密钥泄露导致的安全风险。 通过理解这些基本步骤,开发者可以在.NET和Java之间...
MD5常用于数据校验,但请注意,由于其安全性较低,不适用于加密或现代的安全需求,如证书签名。 支付宝的验签工具可能包含了以下功能: 1. 生成密钥对:工具可以生成RSA或RSA2密钥对,包括公钥和私钥。私钥用于...
- 数据加密解密:对需要发送给支付宝的数据进行RSA加密和解密。 - 签名与验签:对请求数据生成RSA签名,并验证支付宝返回的签名。 - 文件操作:可能支持对证书和私钥文件的导入导出。 5. **使用步骤** - 安装...
本文将详细探讨SM2算法的原理、使用场景,以及在前端js中实现加解密和签名验签的方法,同时参考sm-crypto库的使用。 首先,SM2算法的核心是椭圆曲线加密,它利用椭圆曲线上的数学性质来构建公钥和私钥。公钥是可以...
本篇文章重点介绍如何利用Python3中的`Crypto`库实现RSA算法的加密解密以及签名与验签功能。通过具体代码示例帮助读者理解并掌握这些功能的具体实现方式。 #### 二、基础概念 ##### 2.1 非对称加密算法简介 非...
在签名验签场景中,PKCS#7通常用于包含签名数据、证书以及可能的其他信息,形成一个结构化的签名消息。在这个PHP demo中,它可能被用来包装原始数据,然后使用私钥进行签名,或者接收已签名的数据并用公钥进行验证。...
本实例代码着重于Java与.NET平台之间的RSA加密解密及签名验签操作,这对于跨平台的数据安全通信具有实际意义,例如与支付宝POS对接时。 1. **RSA算法基础**: RSA是一种基于大数因子分解困难性的公钥密码体制。它...
- 可能包含证书管理,如加载、存储和解析X.509证书,以及处理密钥对的生成和导入。 - 可能提供了异常处理和日志记录功能,便于调试和监控。 - 考虑到安全性,项目可能还涉及证书链的验证和时间戳服务,确保签名的...
"java_PHP翼支付签名验签.zip"这个压缩包文件包含的是关于Java和PHP如何实现翼支付平台的签名验证和证书认证的相关示例代码。这涉及到网络安全、数据加密以及支付接口的安全通信等多个关键知识点。 1. **签名验签...
System.out.println("\n公钥加密——私钥解密"); byte[] encrypt = CertificateUtils.encryptByPublicKey(data.getBytes("utf-8"), certificatePath); String encode = base64Encoding(encrypt); System.out...
原创 python国密算法SM2 + 加解密及签名验签 + 调用jar包demo 新鲜出炉,亲测可用。疑问可留言咨询。
C# RSA加密、解密、加签、验签、支持JAVA格式公钥私钥、PEM格式公钥私钥、.NET格式公钥私钥 对应文章: http://blog.csdn.net/gzy11/article/details/54573973
它基于椭圆曲线上的离散对数难题,提供了高效的密钥生成、加密解密以及数字签名验签功能。与RSA等传统算法相比,SM2在相同安全级别下,其密钥长度更短,运算速度更快,更适合资源有限的嵌入式设备和移动终端。 在...
用于python与java之间,使用国密算法SM2加解密及签名验签
本文将详细讲解RSA算法的加签、加密、解密以及验签的过程,结合Java语言来实现这一系列操作,并涉及到证书的使用。 首先,我们需要理解RSA算法的基本原理。RSA算法基于两个大素数的乘积难以分解这一数学难题,生成...