介绍

由于SHA-1和RSA-1024已过时且安全性较低,因此SHA-256和RSA 2048是当前的标准。SHA-256是一种非常好的安全散列算法,非常适合在证书上使用,而2048位RSA是一种很好的签名算法(注意签名与加密不同)。使用带有SHA-256的2048位RSA是证书的安全签名方案。这将允许您生成可用于加密和解密数据的公钥和私钥。为了演示这个我创建了测试类,你可以按照指南并检查下面的代码。

RSACipher

package com.common.util;

import com.common.util.sign.encrypt.Base64;

import java.security.Key;

import java.security.KeyFactory;

import java.security.KeyPair;

import java.security.KeyPairGenerator;

import java.security.PrivateKey;

import java.security.PublicKey;

import java.security.spec.KeySpec;

import java.security.spec.PKCS8EncodedKeySpec;

import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;

public class RSACipher {

private final static String CRYPTO_METHOD = "RSA";

private final static String CYPHER = "RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING";

private final static int CRYPTO_BITS = 2048;

private static String PUB_KEY = "PUB_KEY";

private static String PRIVATE_KEY = "PRIVATE_KEY";

private static String CHARSET = "UTF-8";

/*private final static int CRYPTO_BITS = 4096; This will encrypt in 4093bits, note however that is slower.*/

public RSACipher() {

KeyPair kp = getKeyPair();

PublicKey publicKey = kp.getPublic();

byte[] publicKeyBytes = publicKey.getEncoded();

PUB_KEY = new String(Base64.encode(publicKeyBytes));

//Save the public key so it is not generated each and every time

PrivateKey privateKey = kp.getPrivate();

byte[] privateKeyBytes = privateKey.getEncoded();

PRIVATE_KEY = new String(Base64.encode(privateKeyBytes));

//Also Save the private key so it is not generated each and every time

}

public static KeyPair getKeyPair() {

KeyPair kp = null;

try {

KeyPairGenerator kpg = KeyPairGenerator.getInstance(CRYPTO_METHOD);

kpg.initialize(CRYPTO_BITS);

kp = kpg.generateKeyPair();

} catch (Exception e) {

e.printStackTrace();

}

return kp;

}

public static String encrypt(String clearText) {

String encryptedBase64 = "";

try {

KeyFactory keyFac = KeyFactory.getInstance(CRYPTO_METHOD);

KeySpec

keySpec =

new X509EncodedKeySpec(Base64.decode(PUB_KEY.trim()));

Key key = keyFac.generatePublic(keySpec);

final Cipher cipher = Cipher.getInstance(CYPHER);

cipher.init(Cipher.ENCRYPT_MODE, key);

byte[] encryptedBytes = cipher.doFinal(clearText.getBytes(CHARSET));

encryptedBase64 = new String(Base64.encode(encryptedBytes));

} catch (Exception e) {

e.printStackTrace();

}

return encryptedBase64.replaceAll("(\\r|\\n)", "");

}

public static String decrypt(String encryptedBase64) {

String decryptedString = "";

try {

KeyFactory keyFac = KeyFactory.getInstance(CRYPTO_METHOD);

KeySpec keySpec = new PKCS8EncodedKeySpec(

Base64.decode(PRIVATE_KEY.trim()));

Key key = keyFac.generatePrivate(keySpec);

final Cipher cipher = Cipher.getInstance(CYPHER);

cipher.init(Cipher.DECRYPT_MODE, key);

byte[] encryptedBytes = Base64.decode(encryptedBase64);

byte[] decryptedBytes = cipher.doFinal(encryptedBytes);

decryptedString = new String(decryptedBytes);

} catch (Exception e) {

e.printStackTrace();

}

return decryptedString;

}

public static void main(String[] args) {

RSACipher rsaCipher = new RSACipher();

System.out.println("pub_key:" + PUB_KEY);

System.out.println("private_key:" + PRIVATE_KEY);

System.out.println("========================");

String encrpytMsg = rsaCipher.encrypt("helllo");

System.out.println(encrpytMsg);

String decryptMsg = rsaCipher.decrypt(encrpytMsg);

System.out.println(decryptMsg);

}

}

rsa 2048 java_使用SHA-256和RSA 2048进行加密和签名相关推荐

  1. ios rsa java_一篇搞定RSA加密与SHA签名|与Java完全同步

    本文是投稿文章,作者:Panda_iOS 看到这篇文章的同学可幸福了,当时在做RSA加密与签名的时候网上的资料简直不要太老,做完后实在是忍受不下去了,这篇文章我会详细讲解iOS如何实现RSA加密与签名 ...

  2. Qt写的超级方便的编码转换器、加解密AES、RSA、MD5、SHA、网页编码

    Qt彻底解决乱码问题,各种编码转换工具 Qt写的超级方便的编码转换器.加解密AES.RSA.MD5.SHA.网页编码 一键把内容转换成GBK.UTF-8.UTF-16FE.UTF-16BE.GB231 ...

  3. iOS使用Security.framework进行RSA 加密解密签名和验证签名

    iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...

  4. python RSA 加密与签名

    PyCrypto装起来就简单多了,我是直接 sudo easy_install pycrypto 直接搞定的 先生成rsa的公私钥: 打开控制台,输入 openssl  再输入 genrsa -out ...

  5. .NET Core 使用RSA算法 加密/解密/签名/验证签名

    前言 前不久移植了支付宝官方的SDK,以适用ASP.NET Core使用支付宝支付,但是最近有好几位用户反应在Linux下使用会出错,调试发现是RSA加密的错误,下面具体讲一讲. RSA在.NET C ...

  6. PHP rsa私钥pkcs8加密,Openssl rsa私钥的PKCS#1和PKCS#8格式以及加密和转化

    这里主要介绍: 私钥的PKCS#1格式,及PKCS#8格式 格式PKCS#1和PKCS#8之间的互相转化 私钥的加密,解密 PKCS#1 -> PKCS#8 生成PKCS#1私钥 $ opens ...

  7. rsa私钥和公钥_如何创建RSA公钥和私钥?

    rsa私钥和公钥 RSA is an algorithm used for Cryptography. It was patented until 2000 in the USA (not the w ...

  8. rsa加密算法java实例,java实现的RSA加密算法详解

    本文实例讲述了java实现的RSA加密算法.分享给大家供大家参考,具体如下: 一.什么是非对称加密 1.加密的密钥与加密的密钥不相同,这样的加密算法称之为非对称加密 2.密钥分为:公钥,私钥 公钥:可 ...

  9. JSON 接口如何实现 RSA 非对称加密与签名

    代码地址如下: http://www.demodashi.com/demo/14000.html 一.概述 1. 数字签名的作用:保证数据完整性,机密性和发送方角色的不可抵赖性,加密与签字结合时,两套 ...

最新文章

  1. Java知多少(87)选择框和单选按钮(转)
  2. TOC之关键链项目管理遇到软件工程7原则
  3. 用简单的例子说明提升可复用性的设计模式
  4. vue-touchjs
  5. CTA策略02_boll
  6. mysql 并发_MySQL多版本并发控制机制(MVCC)源码浅析
  7. 在windows 7上是否可以运行win 10的应用
  8. 计算机的组装怎么学,如何学习组装电脑
  9. 手机怎样设置垃圾短信拦截?
  10. 导出MySQL数据项到excel及数据错位的解决办法
  11. Daily English - ... is driving me up a wall.
  12. android layout_gravity center,android: layout_gravity与gravity区别及动态设置
  13. VS2017 Git failed with a fatal error. Git failed with a fatal error. Need to specify how to reconcil
  14. 监控html页面数据获取失败,前端异常采集(附实例)
  15. 反脆弱·从不确定性中获益---管理?
  16. 学习centos第八天--网络命令查看
  17. 初学XML,xmlns的含义
  18. 2023年上海理工大学材料与化工专业考研成功上岸前辈复习经验指导
  19. 用手机访问计算机共享资源,手机访问电脑文件 手机与电脑如何共享数据?AirShareUp 云悦享...
  20. 利用MT Photos生成的重复文件列表,删除重复文件

热门文章

  1. CUDA——Windows上CUDA的安装教程
  2. 【已解决】显示屏没有问题,主机电源键按不开机怎么办?
  3. MySQL学习记录 (三) ----- SQL数据定义语句(DDL)
  4. 火星人谚语系列之三:正确的答案一定简单
  5. bzoj2438 luogu4819 [中山市选]杀人游戏
  6. bootstrapTable 取消 “正在加载中...”
  7. Taobao File System
  8. 第二十讲、迭代器模式
  9. 简单的MySql游标创建
  10. Hibernate关联关系映射-----基于连接表的单向一对多映射配置