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】相关推荐

  1. golang实现RSA加密解密算法

    golang实现RSA加密解密算法 前言 一.生成密钥对(公钥私钥) 二.根据公钥加密 二.根据私钥解密 总结 前言 直接看正文吧! 一.生成密钥对(公钥私钥) 代码如下(示例): //生成私钥pri ...

  2. rsa加解密算法报告c语言,RSA加密解密算法c语言程序Word版

    <RSA加密解密算法c语言程序Word版>由会员分享,可在线阅读,更多相关<RSA加密解密算法c语言程序Word版(5页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版 ...

  3. python实现rsa加密源代码_python实现RSA加密(解密)算法

    RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. 今天只有短的RSA钥匙才可能被强力方式解破.到2008年为止,世界上还没有任何可靠 ...

  4. RSA加密解密算法的java实现

    最近有一个外部合作项目要求在数据传输过程中使用RSA加密算法对数据进行加密,所以需要编写一个加解密的工具类,因为对方不是java语言,所以是各自实现的这个工具,本文主要讨论实现以及双方调试过程中的一些 ...

  5. RSA 加密解密算法实现(简单,易懂)!!!

    目录 一.什么是RSA算法 1.对称加密 2.非对称加密 3.非对称加密的应用 二.RSA算法的基础操作步骤 1.生成公钥和私钥 2.用公钥加密信息 3.用私钥解密信息 三.AC代码 六.RSA算法的 ...

  6. java php rsa加密解密算法_PHP rsa加密解密算法原理解析

    php服务端与客户端交互.提供开放api时,通常需要对敏感的部分api数据传输进行数据加密,这时候rsa非对称加密就能派上用处了,下面通过一个例子来说明如何用php来实现数据的加密解密 1.加密解密的 ...

  7. 用实例给新手讲解易懂的RSA加密解密算法

    用实例给新手讲解易懂的RSA加密算法 RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它.我查过论坛上很少这方面的介绍,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深 ...

  8. RSA加密解密算法工具_JAVA

    这个版本绝对能用,本人亲测 注意:需要下载两个jar包 [commons-codec-1.11-bin.zip]下载地址如下: http://commons.apache.org/proper/com ...

  9. c++/c SM4加密解密算法代码实现

    #include <openssl/sms4.h>int main(void) {//加密参数初始化sms4_key_t sms4_key_enc;unsigned char *plain ...

最新文章

  1. SVN状态图标不显示的两种解决办法
  2. Java怎么定义图片公共路径_【Java】springboot配置图片访问路径
  3. Apache Directory 指令
  4. YbtOJ#903-染色方案【拉格朗日插值,NTT,分治】
  5. 数据结构期末复习之二叉排序树
  6. java office web apps_应用程序与 Office Web Apps 整合
  7. dcmtk在PACS开发中的应用(基础篇) 作者:冷家锋 第三章 工作列表(Work List)(一)...
  8. 2016年1月29日报
  9. SpringCloud使用Prometheus监控(基于Eureka)
  10. 稀疏编码(sparse code)与字典学习(dictionary learning)
  11. ssh无密码登录设置
  12. 有道云笔记怎么保存html,有道云笔记怎么保存网页?有道云笔记保存网页技巧...
  13. UE5 Live Coding编译出错时乱码问题解决方法
  14. 修改计算机显示颜色16位色,教你win10怎么调成16位色
  15. IIS 6.0 支持Php
  16. 告别BIOS EFI时代来临
  17. 52o1314小符号_我要1314数字的特殊符号。数字很小的那种
  18. Convert hex to base64
  19. 根证书的有效期与服务器SSL证书一样长吗?
  20. python attention机制_[深度应用]·Keras实现Self-Attention文本分类(机器如何读懂人心)...

热门文章

  1. 2022年版中国煤矿安全设备市场投资规划及需求前景预测报告
  2. 空腹不能吃的东西,可不仅仅是香蕉和柿子
  3. linux系统的midi制作软件,MIDI音乐制作软件(MidiEditor)
  4. 递归与迭代,台阶问题,斐波那契,分治算法
  5. 如何能更更好的装逼 (Windows CMD命令大全)
  6. OpencvSharp的Mat类型数组传入c++的DLL
  7. 什么是Promise?Promise的优点
  8. 详谈什么是接口测试?
  9. android 开发者论坛
  10. java中空指针异常如何解决_main函数中出现空指针异常,如何解决?