RSA加密介绍
来源:互联网 发布:软件项目成果总结报告 编辑:程序博客网 时间:2024/05/21 10:32
RSA 算法:
明文--->公钥--->密文
通过这个我们可知 他是公钥对内容进行加密 进而借助密钥对文件进行解密 因为公钥和密钥是不一样的 所以 我们将其称为
非对称加密。
RSA由于public key<公钥> 和private key<密钥>的不同<也叫非对称算法加解密>,极大的提高了文件的安全性。
代码如下
KeyPairGenerator是一个引擎类可以生成私钥及其相关利用公钥算法初始化。
1:
- //设置使用何种加密算法
- KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
构造一个新实例的KeyPairGenerator算法使用的名称。
- // 密钥位数
- keyPairGen.initialize(1024);
- // 密钥对
- KeyPair keyPair = keyPairGen.generateKeyPair();
- // 公钥
- PublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
- // 私钥
- PrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
2:
为了公钥跟私钥可以传输和保存,因此可以设置为将他们转化成base64的编码,用到以下方法:
注意 这个地方就是将数据转化为base64编码
- /****************************************
- * 函数说明:getKeyString 根据key得到64位加密字符串
- *
- * @param key 密钥
- * @throws Exception
- * @return String 加密后的字符串
- * @author 王洪贺 2013-8-21
- ***************************************/
- public static String getKeyString(Key key) throws Exception
- {
- byte[] keyBytes = key.getEncoded();
- String s = base64Enc(keyBytes);
- return s;
- }
但加密跟解密的时候需要将base64位的编码转化为key的对象,所以用到以下两个方法:
- /****************************************
- * 函数说明:getPublicKey 取得公钥
- *
- * @param key 公钥字符串
- * @throws Exception
- * @return PublicKey 返回公钥
- * @author 王洪贺 2013-8-21
- ***************************************/
- public static PublicKey getPublicKey(String key) throws Exception
- {
- byte[] keyBytes;
- keyBytes = base64Dec(key);
- X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
- KeyFactory keyFactory = KeyFactory.getInstance("RSA");
- PublicKey publicKey = keyFactory.generatePublic(keySpec);
- return publicKey;
- }
- /****************************************
- * 函数说明:getPrivateKey 取得私钥
- *
- * @param key 私钥字符串
- * @throws Exception
- * @return PrivateKey 返回私钥
- * @author 王洪贺 2013-8-21
- ***************************************/
- public static PrivateKey getPrivateKey(String key) throws Exception
- {
- byte[] keyBytes;
- keyBytes = base64Dec(key);
- PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
- KeyFactory keyFactory = KeyFactory.getInstance("RSA");
- PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
- return privateKey;
- }
下面就是加密过程,很简单:
- // 实例化加解密类
- Cipher cipher = Cipher.getInstance("RSA");
- // 明文
- byte[] plainText = "明文".getBytes();
- // 加密
- cipher.init(Cipher.ENCRYPT_MODE, publicKe);
- //将明文转化为根据公钥加密的密文,为byte数组格式
- byte[] enBytes = cipher.doFinal(plainText);
- //为了方便传输我们可以将byte数组转化为base64的编码
- String str = base64Enc(enBytes );
下面是解密过程,跟加密过程类似:
总结 可得
1:其实我们找个地方就是首先借助KeyPairGenerator来确定是何种加密方式
比如RSA 另外 我们此时获得我们的公钥和密钥
2: 但是我们为了传输数据的时候更加容易 所以我们就借助base64编码
3:借助 Cipher类实现我们的我们的对传输内容进行加密和解密。
0 0
- RSA加密介绍
- RSA加密介绍
- RSA加密 简单介绍
- RSA加密
- rsa 加密
- RSA加密
- RSA加密
- RSA加密
- RSA加密
- RSA 加密
- RSA 加密
- rsa加密
- RSA加密
- RSA加密
- RSA加密
- RSA加密
- RSA加密
- RSA加密
- 关于CentOS的开机启动
- CocoaPods安装和使用教程
- 调试代码总结
- node.js是什么
- 浅析 Linux 中的时间编程和实现原理,第 1 部分: Linux 应用层的时间编程
- RSA加密介绍
- C# - object类有哪些基本方法
- 关于struct msghdr结构体的介绍
- 性格决定领导力阅读笔记
- 用户空间使用i2c_dev
- Jquery实现文本框获取焦点清空内容,失去焦点重新获得内容
- Redis学习手册(事务)
- 第十一周项目六 (4.2)1000以内所有回文数
- iOS label中sizeToFit的使用