私钥加密RS256

package com.ruijie.fangcloud.service.impl;

import com.ruijie.fangcloud.util.ApplicationContextUtil;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;
import java.util.HashMap;
import java.util.UUID;

@Service
public class FangCloudServiceImpl {
    @Value("${oauth}")
    public String oauthHost;
    @Value("${open}")
    public String open;
    @Value("${platformId}")
    public String platformId;
    @Value("${kid}")
    public String kid;
    @Value("${sub}")
    public String sub;

    public String getAuth() {
        StringBuffer authBuffer = new StringBuffer("5ac2c61f-5563-43e1-a937-403177588161")
                .append(":")
                .append("25ffaabb-f028-4d17-a896-fdadbaa9d942");
        String auth = Base64.getEncoder().encodeToString(authBuffer.toString().getBytes(StandardCharsets.UTF_8));
        return auth;
    }

    /*
    生成jwt
     */
    public String getUserJwt(int userId) {
        try {

            long millis = System.currentTimeMillis();
            System.out.println(millis);
            long exp = (millis + 50000) / 1000;
            HashMap<String, Object> header = new HashMap<>();
            header.put("alg", "RS256");
            header.put("kid", "zl1DPS9ZWc");
            header.put("type", "jwt");

            HashMap<String, Object> claim = new HashMap<>();
            claim.put("yifangyun_sub_type", "user");
            claim.put("sub", 1362576);
            claim.put("exp", exp);
            claim.put("jti", UUID.randomUUID().toString());
            String env = ApplicationContextUtil.getApplicationContext().getEnvironment().getActiveProfiles()[0];
            String privateKeyPemPath = "privatekey/private_key.pem.";
            if (!"pro".equals(env)) {
                privateKeyPemPath += "dev";
            } else {
                privateKeyPemPath += "pro";
            }
            String secert = readResourceKey(privateKeyPemPath);
            byte[] keyBytes = org.apache.commons.codec.binary.Base64.decodeBase64(secert);
            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PrivateKey privateKey = keyFactory.generatePrivate(keySpec);

            SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.RS256;

            JwtBuilder builder = Jwts.builder().setHeader(header)
                    .setClaims(claim)
                    .signWith(signatureAlgorithm, privateKey);

            return builder.compact();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /*
    生成jwt
     */
    public String getJwt() {
        try {

            long millis = System.currentTimeMillis();
            System.out.println(millis);
            long exp = (millis + 50000) / 1000;
            HashMap<String, Object> header = new HashMap<>();
            header.put("alg", "RS256");
            header.put("kid", kid);
            header.put("type", "jwt");

            HashMap<String, Object> claim = new HashMap<>();
            claim.put("yifangyun_sub_type", "enterprise");
            claim.put("sub", sub);
            claim.put("exp", exp);
            claim.put("jti", UUID.randomUUID().toString());
            String env = ApplicationContextUtil.getApplicationContext().getEnvironment().getActiveProfiles()[0];
            String privateKeyPemPath = "privatekey/private_key.pem.";
            if (!"pro".equals(env)) {
                privateKeyPemPath += "dev";
            } else {
                privateKeyPemPath += "pro";
            }
            String secert = readResourceKey(privateKeyPemPath);
            byte[] keyBytes = org.apache.commons.codec.binary.Base64.decodeBase64(secert);
            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PrivateKey privateKey = keyFactory.generatePrivate(keySpec);

            SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.RS256;

            JwtBuilder builder = Jwts.builder().setHeader(header)
                    .setClaims(claim)
                    .signWith(signatureAlgorithm, privateKey);

            return builder.compact();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 读取资源文件
     *
     * @param fileName 文件的名称
     * @return
     */
    public static String readResourceKey(String fileName) {
        String key = null;
        try {
            InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
            assert inputStream != null;
            key = IOUtils.toString(inputStream, String.valueOf(StandardCharsets.UTF_8));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return key;
    }
}

 

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.11.2</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>0.11.2</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred -->
    <version>0.11.2</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
</dependency>

 

MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC4OJHY0k75ML/l
TqQc6imcruadwPET40GbmDr0FIyeA6USDe5Z3hrVh0fCea+cuzNjbimGIiF07fkc
x+3OYs8xVs4aq/SJk88A1hGAYjY2BK/0NqNtqeOOJrVhjMXH7NkVDyGuOjqonC/C
IENKTszfheCJP3iwxQanjq3h8xnKO9Z/kTRtgY2I8bkOmKQ1gUAoHJ+6rPzFK7hw
tubm3aDuvzPml2F9LfsGwUUZOX6sah94jI13BLqx/J+mWCqOw91QO2d6l2Hysk0Q
PtFValQNhYYrNti3z6gqtJZtcl7Tcz1vf+MM5UJjaA6XBXVIhHmDAIof/tMpC0WF
jGPI68XvAgMBAAECggEAfxJWWC9JVk4wL+Y9AczsAy4J2Ys7P7KkkMVC9RYvoNd2
x6tgXBD+hYeZEiaJ4hym59EXR3THizaTfSzTdmdl7+ymonM2bKfORA9lZx9XsY8u
J9CAjqZ/VpCQ0McfrjZLz2DupJV53NBPiSJkCB+u5ggcx89GWvitDGs4ugDMK1hJ
w0/TAqSGUhPAINM+cfzupsxHAEvsG9/7XYasfSLbp0HWXhMnlV9acRiyAX4V0Efo
z7jwOSMAK07oXpmfzbwNbSvHCSFFOEnxeX2LDXf6oCljpvNndY5fKIc8ZNeF30cL
FTobOO57fJajy0AtpP/1Iwg8uRxJMurpwILXnP4+0QKBgQDyfwZBIjIn7ebZqsIC
INU7qPvU2EokmlAo2PlP95E2ChTqXj4XGH5TCSe7yqeILdDEFrRa0JHOYCN/aAIV
yDxvzNYDFgvpMWA9c++2B81iGRdM8iE7a9uXn41fxwJAv0oK2aBmn8psAV0wB6sl
LUuZJGDePIAIBKAUPLAI9IQvSwKBgQDCeskvPVv2leCgMCObuE0aRyOF8KyYuH/N
ckkXSugFIQvuIgKpFh/LmMf9ND+JY8fjlwVsL3xZqJN2REhLkvCyG4TmVHuf7x2z
2eHgVavZeopy5IfHCePjHDO+/cLn76+t/cJO0nZWVleRACjBxEZ3f0qO90amLc6q
FDQBZq4JbQKBgCyJ4hcyda3Zxy2xbELBzwhPKDnWo/+HDDQEbf4fBV+8iEznlFXf
nMwZgV+/f/fGGnL5jJSlfDJAfCSZcNCZX2hVYfVdJkDlXbzLv3pagoGDBEGQs0Pb
spBtsKSnw6UqvSmzAP/4V1BxC7GXpvqEED+Ha/dFe2p9lv1AjECI0IJzAoGAcrwN
xRjmEGwLwXWlDFGG62Hcy0BaEx+GBqbOCDfg+mWsrCjUePzcdTkFg5Q3h86eNt76
DAFX021o0fUm0a824Vzq4xgkdw6S73Azmi3w3LU2yOGaWQq0r2AMBzmeq0b01ilH
YUk5F2aI8rqtUOOCzy0Bx6aKv692pVCV/d2d/2ECgYEA3bnXKjXcreuax+YjsaCh
5s+EVchEvXklyulV7/WGT1g65oVrR1hvqa6ieC+t/JokX+wHYmMAlPbTyOidXocl
HcTMuXzHP03tcSVEF+yM2YqY1LnW7PIRPdmnTmy25WpCi+h0xq27XmvBm/G3rfu3
ef5sBjg8PWxRjd3FT8Ll7/Q=
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值