RSA加密分主要为公钥加密和私钥加密验签
使用SUN提供的security封装的方法
基础原理:
RSA就是建立在对大数分解质因式的困难上的,理论依据是费马定理和欧拉定理
- 下为私钥加密--签名验证流程:
-
/**
* 数据签名
*
* @param content
* 签名内容
* @param privateKey
* 私钥
* @return 返回签名数据
*/
public
static
String sign(String content, String privateKey) {
try
{
PKCS8EncodedKeySpec priPKCS8 =
new
PKCS8EncodedKeySpec(
Base64.decode(privateKey));
KeyFactory keyf = KeyFactory.getInstance("RSA");
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
-
java.security.Signature signature = java.security.Signature
.getInstance("SHA1WithRSA");//地址算法
-
signature.initSign(priKey);
signature.update(content.getBytes("UTF-8"));
-
byte[] signed = signature.sign();
-
return
Base64.encode(signed);
}
catch
(Exception e) {
e.printStackTrace();
}
-
return
null;
}
-
/**
* 签名验证
*
* @param content 签名内容
* @param sign 签名
* @param lakala_public_key
* @return
*/
public
static
boolean
verify(String content, String sign,
String public_key) {
try
{
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
byte[] encodedKey = Base64.decode(public_key);
PublicKey pubKey = keyFactory
.generatePublic(new
X509EncodedKeySpec(encodedKey));
-
java.security.Signature signature = java.security.Signature
.getInstance("SHA1WithRSA");
-
signature.initVerify(pubKey);
signature.update(content.getBytes("UTF-8"));
-
boolean
bverify = signature.verify(Base64.decode(sign));
return
bverify;
-
}
catch
(Exception e) {
e.printStackTrace();
}
-
return
false;
}
其中RSA核心的类
Cipher
- getInstance可选择加密模式:填充模式、非填充模式、正常模式,笔者目前遇到的加密模式有这三种。
- provider为提供加密算法是谁比如 RSA/ECB/NoPadding 表示RSA提供加密算法,ECB代表其属于工作模式,NoPadding即为非填充模式。
- 笔者在做对客户端发送密文,服务器接收秘闻进行加密的时候,遇到过解析乱码的问题
- 那是因为客户端比如Andriod端进行加密使用的基础框架默认使用填充模式,传来的都是长度为128的密文,当加解密模式不一致时出现乱码也是对的,java填充是从前开始填充,androd是在尾部开始填充,解决方法有两种,第一统一标准,第二中提供一个新的provider
转载于:https://my.oschina.net/Denniswang/blog/678591
分享到:
相关推荐
### 基于RSA的加密算法的实验报告 ...综上所述,通过本实验报告的学习和实践,我们可以深入了解RSA算法的工作原理及其在实际应用中的实现细节。这对于理解现代密码学的基本概念和技术具有重要意义。
### RSA实验报告知识点详解 #### 实验目的 本次实验旨在帮助学生深入理解RSA算法的基本原理及其特点,并...通过实践操作,学生能够更好地掌握加密算法的实际应用,并为进一步学习更高级别的安全技术打下坚实的基础。
RSA算法是一种广泛应用于网络安全的非对称加密技术,由Ron Rivest、Adi Shamir和Leonard ...通过上述分析,我们可以看出这个MATLAB程序虽然不能处理1024位的RSA密钥,但它提供了一个学习和理解RSA加密机制的基础平台。
RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出。它的核心思想是公钥和私钥的分离:任何人都可以获取公钥进行加密,但只有拥有对应私钥的人才能解密。这使得RSA在安全通信、数字...
概率论和统计学在数据分析、机器学习和人工智能中不可或缺。贝叶斯统计为数据驱动的决策提供了理论框架,而随机过程则在模拟和预测系统行为时发挥着作用。 数学在计算机科学的许多其他领域也发挥着重要作用。例如,...
### 网络信息安全学习心得体会 #### 一、引言 随着信息技术的飞速发展,网络信息安全已成为现代社会不可或缺的一部分。在网络信息安全的学习过程中,不仅能够深刻理解到信息安全的重要性,还能够掌握保护个人信息...
12102790.zip文件很可能是该书的电子版,包含了一些关键章节或资料,为学习者提供了便捷的学习资源。 在计算数论中,有几个关键的知识点值得我们深入研究: 1. **素数分布**:计算数论的一个重要问题是理解素数的...
同时,学生也可以学习到如何设计和实现一个使用RSA算法进行加密解密的系统,包括操作界面设计和算法实现代码的编写。 参考文献: 1. RSA官方网站:https://www.rsa.com/ 2. 《数据加密解密》作者:John Smith 出版...
描述中提到,学习资料包括“中文手册,编程实例,学习心得等等”,这暗示了资源包的内容非常全面。中文手册对于中文使用者来说是极大的便利,能够帮助理解和掌握OpenSSL的相关概念和技术;编程实例则提供了实际操作...
密码学是一门涉及信息安全、数据保护以及网络安全的学科,它主要关注如何通过加密、解密...同时,对于密码学的学习和理解,不仅有助于我们理解信息世界的运作,还能为我们应对未来的网络安全威胁提供必要的知识和工具。
在本文中,我们将深入探讨SFTP(Secure File Transfer Protocol)的学习心得,特别是在Windows环境下通过Java进行实现的方法。SFTP是一种安全的文件传输协议,它基于SSH(Secure Shell)协议,确保数据传输的安全性...
现代密码算法如RSA、AES等,以及公钥密码体制的出现,为信息加密提供了更强的安全保障。此外,现代密码学还涉及到零知识证明、量子密码学等前沿领域。 【密码技术的应用】 密码技术广泛应用于网络安全、电子商务、...
5. **RSA**:RSA是一种非对称加密算法,基于大数因子分解的困难性。它包含一对密钥,公钥用于加密,私钥用于解密,广泛应用于数字证书和网络通信中的身份验证。 6. **DSA(Digital Signature Algorithm)**:DSA是...
首先,说明.txt文件可能包含了作者在学习过程中的一些心得、技巧或者案例概述。在逆向工程中,理解代码逻辑、跟踪函数调用、识别加密算法等都是关键技能。作者可能会分享如何使用工具如dex2jar、JD-GUI来将Dalvik...
网络的安全性是当今数字化时代的重要议题,随着互联网的普及,网络安全不仅关乎个人隐私,也影响着企业、政府乃至整个社会的稳定运行。...因此,了解和学习网络安全知识,对于每一个网络用户来说都至关重要。
- **参与社区交流**:加入Linux相关的论坛或社交媒体群组,与其他学习者一起交流心得,遇到问题时也可以寻求帮助。 - **持续更新知识**:由于技术的不断进步,Linux也在不断发展和完善中。因此,保持好奇心和求知欲...
通过使用各种加密算法,如AES、RSA等,可以将数据转化为密文,在传输和存储过程中即使被非法获取也难以解读。加密技术分为对称加密和非对称加密。对称加密效率高,但需要安全地传递密钥;非对称加密虽处理速度慢,但...
密码学是一门深奥且至关重要的学科,它源于古希腊语中的“隐藏的书写”,旨在保护信息的安全,防止未授权的访问和泄露。...通过深入学习和理解密码学,我们可以更好地应对信息时代带来的挑战,构建更安全的数字世界。
3. **计算解密指数d**:求e关于φ(N)的模逆元d,即d满足e*d%φ(N)=1。这个过程可以通过扩展欧几里得算法完成。 4. **密钥对**:公钥由{e, N}组成,私钥由{d, N}组成。公钥可以公开,而私钥必须由密钥持有者妥善保管...
例如,了解基本的加密算法(如AES和RSA)及其在数据保护中的应用,理解防火墙和入侵检测系统的工作原理,以及学习如何进行安全审计和漏洞扫描。 评估环节通常要求参赛者能够进行实际操作,比如配置安全设备、排查...