左晓为主开发手持机充值管理机
zuoxiao
2024-08-09 9450bcb197c2de53982368d5c2059b31abed3b87
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
package com.dayu.qiheonlinelibrary.net;
 
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
 
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
 
/**
 * author: zuo
 * Date: 2024-07-29
 * Time: 14:38
 * 备注:RSA加密工具类
 */
public class RSAUtile {
 
 
 
 
    public static String encryptByPublicKey(String data, String publicKeyPEM) {
        try {
            // 得到公钥
            publicKeyPEM = publicKeyPEM.replace("-----BEGIN PUBLIC KEY-----", "")
                    .replace("-----END PUBLIC KEY-----", "")
                    .replaceAll("\\s+", "");
            // 解码Base64编码的公钥
            byte[] decoded = new byte[0];
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
                decoded = Base64.getDecoder().decode(publicKeyPEM);
            } else {
                decoded = android.util.Base64.decode(publicKeyPEM, android.util.Base64.DEFAULT);
            }
            // 生成公钥
            X509EncodedKeySpec spec = new X509EncodedKeySpec(decoded);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PublicKey publicKey = keyFactory.generatePublic(spec);
            // 加密数据
            Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            byte[] encryptedBytes = cipher.doFinal(data.getBytes("UTF-8"));
            String encryptedData = null;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
                encryptedData = Base64.getEncoder().encodeToString(encryptedBytes);
            } else {
                encryptedData = android.util.Base64.encodeToString(encryptedBytes, android.util.Base64.DEFAULT);
            }
            return encryptedData;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
 
 
}