RSA加密解密算法代码实现【scalajava】
1. 什么是RSA加密算法?
1.1 对称加密和非对称加密
- 对称加密:对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。常见的对称加密算法:DES,AES,3DES等等。
- 非对称加密:非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。常见的非对称加密算法:RSA,ECC
1.2 RSA加密算法
RSA加密算法是一种非对称加密算法,是通过两个密钥(公钥-私钥)来实现对数据的加密和解密的。公钥用于加密,私钥用于解密。
2. scala实现RSA加密
Object Rsa{/*** 公钥加密* 传入参数为需要加密的字符串origStr,返回结果为加密后的字符串和私钥的元组(encodeStr,privateKeyStr)*/def rsaEncryPtion(origStr:String):(String,String)={//生成公钥和私钥val keyPairGenerator = KeyPairGenerator.getInstance("RSA")keyPairGenerator.initialize(1024, new SecureRandom())val keyPair = keyPairGenerator.generateKeyPair()val privateKey = keyPair.getPrivateval privateKeyStr = new String(Base64.encode(privateKey.getEncoded))val publicKey = keyPair.getPublicval publicKeyStr = new String(Base64.encode(publicKey.getEncoded))//进行加密处理val encoded = Base64.decode(publicKeyStr)val rsaPublicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(encoded))val cipher = Cipher.getInstance("RSA")cipher.init(Cipher.ENCRYPT_MODE, rsaPublicKey)val encodeStr = Base64.encode(cipher.doFinal(origStr.getBytes("UTF-8")))(encodeStr,privateKeyStr)}/*** 私钥解密* 传入参数为加密过后的字符串encodeStr、私钥privateStr,返回结果为解密后的数据*/def rsaDecryPtion(encodeStr:String,privateKeyStr:String):String={val bytes = Base64.decode(encodeStr)val decoded = Base64.decode(privateKey)val rsaPrivateKey = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded))val cipher = Cipher.getInstance("RSA")cipher.init(Cipher.DECRYPT_MODE, rsaPrivateKey)val codeStr = new String(cipher.doFinal(bytes))codeStr}def main(args: Array[String]) {//待加密的数据val origData = "RSA from korry24"//加密val origDecry = rsaEncryPtion(origData)//加密后的数据val encodeStr = origDecry._1//私钥val privateKeyStr = origDecry._2//解密val codeStr = rsaDecryPtion(encodeStr,privateKeyStr)}}
3. java实现RSA加密
public class RSACrypt {private static Map<Integer, String> keyMap = new HashMap<Integer, String>();/*** 初始化生成公钥和私钥* */public static void init() throws NoSuchAlgorithmException{/*** KeyPairGenerator用于生成公钥和私钥对,基于RSA算法生成对象*/KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");/*** 初始化秘钥对生成器,秘钥大小为1024位*/keyPairGen.initialize(1024, new SecureRandom());/*** 生成秘钥*/KeyPair keyPair = keyPairGen.generateKeyPair();/*** 获取私钥*/RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate();String privateKeyStr = new String(Base64.encodeBase64(privateKey.getEncoded()));/** * 获取公钥*/RSAPublicKey publicKey = (RSAPublicKey)keyPair.getPublic();String publicKeyStr = new String(Base64.encodeBase64(publicKey.getEncoded()));/*** 保存公钥,私钥*/keyMap.put(0, publicKeyStr); // 公钥keyMap.put(1, privateKeyStr);// 私钥}/*** 公钥加密* @throws NoSuchAlgorithmException * @throws InvalidKeySpecException * @throws Exception */public static String rsaEncrypt(String content, String publicKey) throws InvalidKeySpecException, NoSuchAlgorithmException, Exception{//base64编码的公钥byte[] encoded = Base64.decodeBase64(publicKey);RSAPublicKey rsaPublicKey = (RSAPublicKey)KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(encoded));// RSA加密Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, rsaPublicKey);String outPublicKey = Base64.encodeBase64String(cipher.doFinal(content.getBytes("UTF-8")));return outPublicKey;}/*** 私钥解密* @throws UnsupportedEncodingException * @throws NoSuchAlgorithmException * @throws InvalidKeySpecException * @throws NoSuchPaddingException * @throws InvalidKeyException * @throws BadPaddingException * @throws IllegalBlockSizeException * @throws Exception*/public static String rsaDecrypt(String content, String privateKey) throws UnsupportedEncodingException, InvalidKeySpecException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException{//base64位解码加密后的字符串byte[] inputByte = Base64.decodeBase64(content.getBytes("UTF-8"));//base64编码的私钥byte[] decoded = Base64.decodeBase64(privateKey);RSAPrivateKey rsaPrivateKey = (RSAPrivateKey)KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));//RSA解密Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, rsaPrivateKey);String outPrivateKey = new String(cipher.doFinal(inputByte));return outPrivateKey;}public static void main(String[] args) throws Exception {/*** 初始化生成公钥,私钥*/init();/*** 加密数据*/String message = "abc123";System.out.println("随机生成的公钥为:" + keyMap.get(0));System.out.println("随机生成的私钥为:" + keyMap.get(1));System.out.println("加密前的数据:" + message);String messageEncrypt = rsaEncrypt(message, keyMap.get(0));System.out.println("加密后的数据:" + messageEncrypt);//String mid = "MIIc" + keyMap.get(1).substring(4, keyMap.get(1).length());//System.out.println("随机生成的私钥为:" + mid);String messageDecrypt = rsaDecrypt(messageEncrypt, keyMap.get(1));System.out.println("解密后的数据:" + messageDecrypt);}
}
RSA加密解密算法代码实现【scalajava】相关推荐
- golang实现RSA加密解密算法
golang实现RSA加密解密算法 前言 一.生成密钥对(公钥私钥) 二.根据公钥加密 二.根据私钥解密 总结 前言 直接看正文吧! 一.生成密钥对(公钥私钥) 代码如下(示例): //生成私钥pri ...
- rsa加解密算法报告c语言,RSA加密解密算法c语言程序Word版
<RSA加密解密算法c语言程序Word版>由会员分享,可在线阅读,更多相关<RSA加密解密算法c语言程序Word版(5页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版 ...
- python实现rsa加密源代码_python实现RSA加密(解密)算法
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. 今天只有短的RSA钥匙才可能被强力方式解破.到2008年为止,世界上还没有任何可靠 ...
- RSA加密解密算法的java实现
最近有一个外部合作项目要求在数据传输过程中使用RSA加密算法对数据进行加密,所以需要编写一个加解密的工具类,因为对方不是java语言,所以是各自实现的这个工具,本文主要讨论实现以及双方调试过程中的一些 ...
- RSA 加密解密算法实现(简单,易懂)!!!
目录 一.什么是RSA算法 1.对称加密 2.非对称加密 3.非对称加密的应用 二.RSA算法的基础操作步骤 1.生成公钥和私钥 2.用公钥加密信息 3.用私钥解密信息 三.AC代码 六.RSA算法的 ...
- java php rsa加密解密算法_PHP rsa加密解密算法原理解析
php服务端与客户端交互.提供开放api时,通常需要对敏感的部分api数据传输进行数据加密,这时候rsa非对称加密就能派上用处了,下面通过一个例子来说明如何用php来实现数据的加密解密 1.加密解密的 ...
- 用实例给新手讲解易懂的RSA加密解密算法
用实例给新手讲解易懂的RSA加密算法 RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它.我查过论坛上很少这方面的介绍,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深 ...
- RSA加密解密算法工具_JAVA
这个版本绝对能用,本人亲测 注意:需要下载两个jar包 [commons-codec-1.11-bin.zip]下载地址如下: http://commons.apache.org/proper/com ...
- c++/c SM4加密解密算法代码实现
#include <openssl/sms4.h>int main(void) {//加密参数初始化sms4_key_t sms4_key_enc;unsigned char *plain ...
最新文章
- SVN状态图标不显示的两种解决办法
- Java怎么定义图片公共路径_【Java】springboot配置图片访问路径
- Apache Directory 指令
- YbtOJ#903-染色方案【拉格朗日插值,NTT,分治】
- 数据结构期末复习之二叉排序树
- java office web apps_应用程序与 Office Web Apps 整合
- dcmtk在PACS开发中的应用(基础篇) 作者:冷家锋 第三章 工作列表(Work List)(一)...
- 2016年1月29日报
- SpringCloud使用Prometheus监控(基于Eureka)
- 稀疏编码(sparse code)与字典学习(dictionary learning)
- ssh无密码登录设置
- 有道云笔记怎么保存html,有道云笔记怎么保存网页?有道云笔记保存网页技巧...
- UE5 Live Coding编译出错时乱码问题解决方法
- 修改计算机显示颜色16位色,教你win10怎么调成16位色
- IIS 6.0 支持Php
- 告别BIOS EFI时代来临
- 52o1314小符号_我要1314数字的特殊符号。数字很小的那种
- Convert hex to base64
- 根证书的有效期与服务器SSL证书一样长吗?
- python attention机制_[深度应用]·Keras实现Self-Attention文本分类(机器如何读懂人心)...