RSA加密的方式和解密方式实现方法(推荐)

2025-05-29 0 94

RSAsecurity.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117
package com.mstf.rsa;

import java.security.KeyFactory;

import java.security.KeyPair;

import java.security.KeyPairGenerator;

import java.security.PrivateKey;

import java.security.PublicKey;

import java.security.interfaces.RSAPrivateKey;

import java.security.interfaces.RSAPublicKey;

import java.security.spec.PKCS8EncodedKeySpec;

import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

/*RSA 工具类。提供加密解密,生成密钥对等方法。

RSA加密原理概述

RSA的安全性依赖于大数的分解,公钥和私钥都是两个大素数(大于100的十进制位)的函数。

据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积

密钥的产生:

1.选择两个大素数 p,q ,计算 n=p*q;

2.随机选择加密密钥 e ,要求 e 和 (p-1)*(q-1)互质

3.利用 Euclid 算法计算解密密钥 d , 使其满足 e*d = 1(mod(p-1)*(q-1)) (其中 n,d 也要互质)

4:至此得出公钥为 (n,e) 私钥为 (n,d)

RSA速度

* 由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论 是软件还是硬件实现。

* 速度一直是RSA的缺陷。一般来说只用于少量数据 加密。*/

public class RSAsecurity {

public static String src = "admin";

public void priENpubDE() {

try {

// 初始化秘钥

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");

// 秘钥长度

keyPairGenerator.initialize(1024);

// 初始化秘钥对

KeyPair keyPair = keyPairGenerator.generateKeyPair();

// 公钥

RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();

// 私钥

RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();

// 2.私钥加密,公钥解密----加密

// 生成私钥

PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());

KeyFactory keyFactory = KeyFactory.getInstance("RSA");

PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);

// Cipher类为加密和解密提供密码功能,通过getinstance实例化对象

Cipher cipher = Cipher.getInstance("RSA");

// 初始化加密

cipher.init(Cipher.ENCRYPT_MODE, privateKey);

byte[] result = cipher.doFinal(src.getBytes());

System.out.println("私钥加密,公钥解密----加密:" + Base64.encode(result));

// 3.私钥加密,公钥解密----解密

// 生成公钥

X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());

keyFactory = KeyFactory.getInstance("RSA");

PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);

cipher = Cipher.getInstance("RSA");

// 初始化解密

cipher.init(Cipher.DECRYPT_MODE, publicKey);

result = cipher.doFinal(result);

System.out.println("私钥加密,公钥解密----解密:" + new String(result));

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void pubENpriDE() {

try {

// 1.初始化秘钥

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");

// 秘钥长度

keyPairGenerator.initialize(512);

// 初始化秘钥对

KeyPair keyPair = keyPairGenerator.generateKeyPair();

// 公钥

RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();

// 私钥

RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();

// 2.公钥加密,私钥解密----加密

X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());

KeyFactory keyFactory = KeyFactory.getInstance("RSA");

PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);

// 初始化加密

// Cipher类为加密和解密提供密码功能,通过getinstance实例化对象

Cipher cipher = Cipher.getInstance("RSA");

cipher.init(Cipher.ENCRYPT_MODE, publicKey);

// 加密字符串

byte[] result = cipher.doFinal(src.getBytes());

System.out.println("公钥加密,私钥解密----加密:" + Base64.encode(result));

// 3.公钥加密,私钥解密-----解密

PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());

keyFactory = KeyFactory.getInstance("RSA");

PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);

// 初始化解密

cipher.init(Cipher.DECRYPT_MODE, privateKey);

// 解密字符串

result = cipher.doFinal(result);

System.out.println("公钥加密,私钥解密-----解密:" + new String(result));

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

RSAtest.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13
package com.mstf.rsa;

import com.mstf.rsa.RSAsecurity;

public class RSAtest {

public static void main(String[] args) {

RSAsecurity rsAsecurity = new RSAsecurity();

System.out.println("私钥加密公钥解密例:");

rsAsecurity.priENpubDE();

System.out.println("公钥加密私钥解密例:");

rsAsecurity.pubENpriDE();

}

}

以上这篇RSA加密的方式和解密方式实现方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 RSA加密的方式和解密方式实现方法(推荐) https://www.kuaiidc.com/116334.html

相关文章

发表评论
暂无评论