java中 RSA算法 如何进行公钥加密私钥解密

java中对RSA加密算法做了支持。下面是一个小例子:

// 生成公私钥对:

public class KeyGenerater { private byte[] priKey; private byte[] pubKey;

public void generater() {  try {   java.security.KeyPairGenerator keygen = java.security.KeyPairGenerator     .getInstance("RSA");   SecureRandom secrand = new SecureRandom();   secrand.setSeed("syj".getBytes()); // 初始化随机产生器   keygen.initialize(1024, secrand);   KeyPair keys = keygen.genKeyPair();

PublicKey pubkey = keys.getPublic();   PrivateKey prikey = keys.getPrivate();

pubKey = Base64.encodeToByte(pubkey.getEncoded());   priKey = Base64.encodeToByte(prikey.getEncoded());

System.out.println("pubKey = " + new String(pubKey));   System.out.println("priKey = " + new String(priKey));  } catch (java.lang.Exception e) {   System.out.println("生成密钥对失败");   e.printStackTrace();  } }

//获取私钥

public byte[] getPriKey() {  return priKey; }

//获取公钥

public byte[] getPubKey() {  return pubKey; }}

//签名

public class Signaturer {

public static byte[] sign(byte[] priKeyText, String plainText) {  try {   PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64     .decode(priKeyText));   KeyFactory keyf = KeyFactory.getInstance("RSA");   PrivateKey prikey = keyf.generatePrivate(priPKCS8);   // 用私钥对信息生成数字签名   java.security.Signature signet = java.security.Signature     .getInstance("MD5withRSA");   signet.initSign(prikey);   signet.update(plainText.getBytes());   byte[] signed = Base64.encodeToByte(signet.sign());   return signed;  } catch (java.lang.Exception e) {   System.out.println("签名失败");   e.printStackTrace();  }  return null; }}

public class SignProvider { private SignProvider() {

}

// Description:校验数字签名,此方法不会抛出任务异常,成功返回true,失败返回false,

public static boolean verify(byte[] pubKeyText, String plainText,   byte[] signText) {  try {   // 解密由base64编码的公钥,并构造X509EncodedKeySpec对象   java.security.spec.X509EncodedKeySpec bobPubKeySpec = new java.security.spec.X509EncodedKeySpec(     Base64.decode(pubKeyText));   // RSA对称加密算法   java.security.KeyFactory keyFactory = java.security.KeyFactory     .getInstance("RSA");   // 取公钥匙对象   java.security.PublicKey pubKey = keyFactory     .generatePublic(bobPubKeySpec);   // 解密由base64编码的数字签名   byte[] signed = Base64.decode(signText);   java.security.Signature signatureChecker = java.security.Signature     .getInstance("MD5withRSA");   signatureChecker.initVerify(pubKey);   signatureChecker.update(plainText.getBytes());   // 验证签名是否正常   if (signatureChecker.verify(signed))    return true;   else    return false;  } catch (Throwable e) {   System.out.println("校验签名失败");   e.printStackTrace();   return false;  } }}

(0)

相关推荐

  • Java RSA加密算法生成公钥和私钥

    目前为止,RSA是应用最多的公钥加密算法,能够抵抗已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. RSA算法中,每个通信主体都有两个钥匙,一个公钥(Public Key)用来对数据进行加密 ...

  • LINUX中RSA认证登录SSH

    方法一, 有的时候经常需要登录ssh,每次都需要输入密码,会比较繁琐。所以设置了一下使用RSA公钥认证的方式登录Linux。 首先需要在服务器端设置/etc/ssh/sshd_config # vim ...

  • java中进行2、8、16、10进制之间的转换

    我们在编写程序的时候,经常要用到进制之间的转换,但是转换方法很多,我们也不可能做到很准确的记忆,再次就给大家总结一下 java中的进制直接的相互转换,希望对大家有用. java中进行二进制,八进制,十 ...

  • java中的常量定义 final 的问题解决方法

    Java 中我们常常需要定义一些常量ID,ID值为连续不重复值 方法1:, 方便的定义,方便增减ID 非常方便, 程序保证不会有重复的ID public static class HandleMess ...

  • JAVA中Properties类使用方法介绍

    在Java中,其配置文件常为.properties文件,格式为文本文件,文件的内容的格式是“键=值”的格式,文本注释信息可以用"#"来注释.Properties属性文件是软件常用的 ...

  • 如何在win10 java中正确配置环境变量

    有的小伙伴在Windows10系统中使用java编程时,需要根据环境,来配置环境变量,但是却不知道如何正确配置,那么小编就来为大家介绍一下吧.具体如下:1. 第一步,点击桌面底部的搜索栏,接着输入并搜 ...

  • java 中堆和栈的区别方法

    一直以来对java中堆和栈都有点模糊:现在终于搞明白啦 特点: 1. 栈的特点是 : 容量小 速度快 适合存放小型数据 如基本数据类型和对象类型的引用 在栈中变量直接指向存放变量值的空间 对于对象引用 ...

  • java中的invoke方法

    在了解Java中的invoke()方法前,我们需要知道在哪些场景用到了java反射机制以及如何使用. 操作方法 01 一.反射机制应用场景:逆向代码.动态生成类框架等,使用反射机制能够大大的增强程序的 ...

  • java中继承到底指继承的什么

    java中的继承 操作方法 01 1.java类中继承的关键字是extends,一般说子类继承了父类 例如:父类是Animals.java       子类是Cat.java 声明子类的写法是:pub ...