`
buerkai
  • 浏览: 170274 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

RSA非对称加密

    博客分类:
  • Bug
 
阅读更多
package com.test.security;

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.math.BigInteger;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.RSAPublicKeySpec;

import javax.crypto.Cipher;

public class RSAUtil {

/***
* 创建密钥
*
* @param savepath
* @return
*/
public static KeyPair createKeyPair(String savepath) {

KeyPairGenerator kg = null;
try {
kg = KeyPairGenerator.getInstance("RSA",
new org.bouncycastle.jce.provider.BouncyCastleProvider());
// 注意密钥大小最好为1024,否则解密会有乱码情况.
SecureRandom sr = new SecureRandom();
kg.initialize(1024, sr);
KeyPair kp = kg.generateKeyPair();
if (null != savepath) {
FileOutputStream fos = new FileOutputStream(savepath);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(kp);
}
return kp;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}

/****
* 创建公钥
*
* @param mode
* @param pubex
* @return
* @throws Exception
*/
public static RSAPublicKey createRSAPublicKey(String mode, String pubex)
throws Exception {
KeyFactory keyFac = null;
try {
keyFac = KeyFactory.getInstance("RSA",
new org.bouncycastle.jce.provider.BouncyCastleProvider());
} catch (NoSuchAlgorithmException ex) {
throw new Exception(ex.getMessage());
}

RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(
new BigInteger(mode), new BigInteger(pubex));

return (RSAPublicKey) keyFac.generatePublic(pubKeySpec);
}

public static RSAPrivateKey createRSAPrivateKey(String mod, String pubex)
throws Exception {
KeyFactory keyFac = null;
try {
keyFac = KeyFactory.getInstance("RSA",
new org.bouncycastle.jce.provider.BouncyCastleProvider());
} catch (NoSuchAlgorithmException ex) {
throw new Exception(ex.getMessage());
}
RSAPrivateKeySpec privatekeyspec = new RSAPrivateKeySpec(
new BigInteger(mod), new BigInteger(pubex));
return (RSAPrivateKey) keyFac.generatePrivate(privatekeyspec);
}

/***
* 加密
*
* @param key
* @param data
* @return
* @throws Exception
*/
public static byte[] encrypt(Key key, byte[] data) throws Exception {
try {
Cipher cipher = Cipher.getInstance("RSA",
new org.bouncycastle.jce.provider.BouncyCastleProvider());
cipher.init(Cipher.ENCRYPT_MODE, key);
int blockSize = cipher.getBlockSize();
int outputSize = cipher.getOutputSize(data.length);
int leavedSize = data.length % blockSize;
int blocksSize = leavedSize != 0 ? data.length / blockSize + 1
: data.length / blockSize;
byte[] raw = new byte[outputSize * blocksSize];
int i = 0;
while (data.length - i * blockSize > 0) {
if (data.length - i * blockSize > blockSize)
cipher.doFinal(data, i * blockSize, blockSize, raw, i
* outputSize);
else
cipher.doFinal(data, i * blockSize, data.length - i
* blockSize, raw, i * outputSize);
i++;
}
return raw;
} catch (Exception e) {
throw new Exception(e.getMessage());
}
}

/***
* 解密
*
* @param key
* @param raw
* @return
* @throws Exception
*/
public static byte[] decrypt(Key key, byte[] raw) throws Exception {
try {
Cipher cipher = Cipher.getInstance("RSA",
new org.bouncycastle.jce.provider.BouncyCastleProvider());
cipher.init(Cipher.DECRYPT_MODE, key);
int blockSize = cipher.getBlockSize();
ByteArrayOutputStream bout = new ByteArrayOutputStream(64);
int j = 0;
while (raw.length - j * blockSize > 0) {
bout.write(cipher.doFinal(raw, j * blockSize, blockSize));
j++;
}
return bout.toByteArray();
} catch (Exception e) {
throw new Exception(e.getMessage());
}
}

/**
* HEX编码 将形如0x12 0x2A 0x01 转换为122A01
*
* @param data
* @return
*/
public static String hexEncode(byte[] data) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < data.length; i++) {
String tmp = Integer.toHexString(data[i] & 0xff);
if (tmp.length() < 2) {
buffer.append('0');
}
buffer.append(tmp);
}
String retStr = buffer.toString().toUpperCase();
return retStr;
}

/**
* HEX解码 将形如122A01 转换为0x12 0x2A 0x01
*
* @param data
* @return
*/
public static byte[] hexDecode(String data) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
for (int i = 0; i < data.length(); i += 2) {
String onebyte = data.substring(i, i + 2);
int b = Integer.parseInt(onebyte, 16) & 0xff;
out.write(b);
}
return out.toByteArray();
}

public static void main(String [] b) throws Exception{



// KeyPair kp=RSAUtil.createKeyPair(null);
// RSAPublicKey rsapu=(RSAPublicKey)kp.getPublic();
// String pu_mode=rsapu.getModulus().toString();
// String pu_e=rsapu.getPublicExponent().toString();
// System.out.println("1==="+pu_mode);
// System.out.println("1===---="+pu_e);
//
// RSAPrivateKey rsapr=(RSAPrivateKey)kp.getPrivate();
// String pr_mode=rsapr.getModulus().toString();
// String pr_e=rsapr.getPrivateExponent().toString();
// System.out.println("1==="+pr_mode);
// System.out.println("1===---="+pr_e);

String p_mode="103190509448526906675184354225772346071429888143058908524801320734882636647794976703442201427451980154742515355242923272405486638063926806046954606187430474469959480371551827585540584042060956419779924840041960580937115749057780905135508742149286660980732571577959483114185713853564532704043098107986880520621";
String p_e="65537";
String r_mode="103190509448526906675184354225772346071429888143058908524801320734882636647794976703442201427451980154742515355242923272405486638063926806046954606187430474469959480371551827585540584042060956419779924840041960580937115749057780905135508742149286660980732571577959483114185713853564532704043098107986880520621";
String r_e="57110074739574887956659775579031520581607847061002024369486987569997529851109626623289929169402181549241890450432825274477309090272925052750798640783439736345203812293923880602549365460815681279861017814602597215150254395324235620932778059499956426017769871307287955163294147786931713281819809460060173604129";

String abbb="快接啊第三方空间卡斯达克反抗拉萨的asdjfkjaksjdfalsdfkl5455865655568568adsfasdef";
RSAPublicKey rsap=createRSAPublicKey(p_mode, p_e);

       byte [] aaaa=encrypt(rsap,abbb.getBytes("UTF-8"));
       String aa_s=hexEncode(aaaa);
       System.out.println(aa_s);
      
       RSAPrivateKey rep=createRSAPrivateKey(r_mode, r_e);
       byte[] accc=decrypt(rep, aaaa);
       System.out.println(new String(accc,"UTF-8"));
      

}
}
分享到:
评论

相关推荐

    RSA非对称加密算法

    RSA非对称加密算法是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)三位科学家在1977年提出的,这是他们在麻省理工学院共同研究的成果。RSA算法之所以重要,是...

    rsa非对称加密,内含三个前端能用的加解密js

    总之,RSA非对称加密技术为前端开发提供了安全传输数据的手段,而`security.js`、`jsencrypt.min.js`、`RSAjs`和`encrypt.js`这些JavaScript库则为开发者提供了实现这一技术的便捷工具。在实际开发中,需结合项目...

    AES对称和RSA非对称加密解密

    本篇文章将详细探讨AES对称加密和RSA非对称加密的Java实现。 AES对称加密是一种广泛应用的块加密算法,它使用相同的密钥进行加密和解密,速度快,效率高。在Java中,我们可以使用Java Cryptography Extension (JCE)...

    Vue中使用jsencrypt进行RSA非对称加密的操作方法

    Vue中使用jsencrypt进行RSA非对称加密的操作方法

    java rsa非对称加密算法3个实例源代码

    java rsa非对称加密算法3个实例源代码

    RSA非对称加密工具类

    RSA非对称加密工具类,用于网络信息传输中

    RSA非对称加密算法的PEM与XML格式密钥对的转换

    RSA非对称加密算法是公钥密码学中的一个重要组成部分,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因其发明者的名字首字母而得名。它广泛应用于网络安全领域,如数据加密、数字签名等。在实际应用中,...

    RSA非对称加密解密Delphi源码

    RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,是现代密码学的基石之一。这种加密方式使用了一对密钥,即公钥和私钥,使得信息的加密和解密过程可以独立进行。在RSA算法中,...

    .net RSA非对称加密例子

    .NET框架提供了一种强大的安全工具,即RSA加密算法,它是一种非对称加密技术,广泛应用于数据加密、数字签名和密钥交换等领域。本示例将深入探讨如何在.NET环境中使用RSA加密,以确保信息的安全。 RSA(Rivest-...

    C#-RSA非对称加密公钥加密.rar

    "C#-RSA非对称加密公钥加密.rar"压缩包提供的就是一个完整的C# RSA非对称加密实例,确保用户可以直接使用,无需额外寻找库文件或代码片段。 RSA算法由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出,其工作...

    rsa非对称加密java工具类

    项目中使用过的一个rsa非对称加密类,用着很不错 ,需要注意的是里边的密钥长度最小是128,不能再小了,还有里边用到了base64的编码,我们用的是jdk 1.8自带的工具类,如果要用的童靴的项目是不jdk 1.8的项目也可以...

    RSA非对称加密前端加密后端解密

    RSA非对称加密是一种在互联网安全领域广泛应用的加密技术,由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家在1977年提出,因此得名RSA。这种加密算法基于大数因子分解的困难性,使得在当前计算能力下,破解...

    5.Java+js RSA非对称加密.rar

    本案例中,"5.Java+js RSA非对称加密.rar"是一个压缩包,包含了使用Java和JavaScript实现RSA非对称加密的代码示例。下面将详细解释相关知识点。 1. **非对称加密**: 非对称加密与对称加密不同,它使用一对公钥和...

    轻松实现RSA非对称加密iOS

    RSA非对称加密是一种广泛应用于网络安全的加密技术,尤其在移动应用如iOS开发中,它在数据保护、身份验证和安全通信中扮演着重要角色。本文将深入探讨如何在iOS平台上,通过Objective-C语言轻松实现RSA非对称加密。 ...

    RSA非对称加密的RSA.zip

    RSA非对称加密是一种广泛使用的加密技术,它在信息安全领域扮演着至关重要的角色。与传统的对称加密不同,非对称加密使用两个密钥:一个公钥和一个私钥。这种加密方法的主要优点在于,公钥可以公开分享,而私钥必须...

    RSA非对称加密帮助类

    RSA非对称加密是一种广泛应用于网络安全的加密技术,它的核心在于使用两个不同的密钥——公钥和私钥。与对称加密不同,非对称加密的公钥可以公开分享,而私钥则需要严格保密。这种加密方式在数据传输、数字签名、SSL...

    RSA非对称加密算法的实现.zip

    RSA非对称加密算法是密码学中的一个重要概念,它的出现极大地推动了网络安全的发展。这个算法由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它是基于大数因子分解的困难性,为数据交换和...

    基于Python语言、RSA非对称加密的IRC聊天室客户端源码与应用程序

    基于Python语言、RSA非对称加密的IRC聊天室客户端源码与应用程序 服务器与客户端之间通过IRC协议进行通信,在IRC协议中,用户可以加入到频道Channel中,在频道中发送消息,频道中的所有人都能接收到信息。 但大多数...

    C#和Java关于RSA非对称加密互通类

    RSA(Rivest-Shamir-Adleman)算法是其中最为广泛使用的非对称加密算法之一。本篇将深入探讨C#和Java之间如何实现RSA非对称加密的互通,并详细讲解涉及的类和方法。 首先,RSA的核心概念是基于两个不同的密钥:公钥...

Global site tag (gtag.js) - Google Analytics