Browse Source

调整rsa操作文件问题

master
xyiege 4 years ago
parent
commit
c031234a8c
  1. 4
      README.md
  2. 257
      pom.xml
  3. 37
      src/main/java/cn/chjyj/szwh/utils/ApiTokenUtils.java
  4. 4
      src/main/java/cn/chjyj/szwh/utils/SzFileUtils.java
  5. 8
      src/test/java/cn/chjyj/szwh/JwtRsaTokenTests.java

4
README.md

@ -27,4 +27,6 @@ eyJhbGciOiJIUzUxMiJ9.eyJhdWQiOiJCRDg0REQ0MkE3MjM0QjA1QjBDNUQxMTYxNjEzMkFDNCIsImp
2、[php-jwt](https://github.com/firebase/php-jwt) 2、[php-jwt](https://github.com/firebase/php-jwt)
[aa](http://localhost:8090/) 3、[Java读取OpenSSL生成的PEM公钥文件操作](http://www.zzvips.com/article/108821.html)
4、[java - 如何读取.pem文件以获取私钥和​​公钥](https://mlog.club/article/130323)

257
pom.xml

@ -1,130 +1,145 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.8</version> <version>2.6.8</version>
<relativePath/> <!-- lookup parent from repository --> <relativePath/> <!-- lookup parent from repository -->
</parent> </parent>
<groupId>cn.chjyj</groupId> <groupId>cn.chjyj</groupId>
<artifactId>szwh</artifactId> <artifactId>szwh</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>1.0.1</version>
<name>szwh</name> <packaging>jar</packaging>
<description>深圳文化交易所api系统</description> <name>szwh</name>
<properties> <description>深圳文化交易所api系统</description>
<java.version>1.8</java.version> <properties>
</properties> <java.version>1.8</java.version>
<dependencies> </properties>
<dependency> <dependencies>
<groupId>org.springframework.boot</groupId> <dependency>
<artifactId>spring-boot-starter-web</artifactId> <groupId>org.springframework.boot</groupId>
</dependency> <artifactId>spring-boot-starter-web</artifactId>
<dependency> </dependency>
<groupId>org.mybatis.spring.boot</groupId> <dependency>
<artifactId>mybatis-spring-boot-starter</artifactId> <groupId>org.mybatis.spring.boot</groupId>
<version>2.2.2</version> <artifactId>mybatis-spring-boot-starter</artifactId>
</dependency> <version>2.2.2</version>
<dependency> </dependency>
<groupId>org.springframework.boot</groupId> <dependency>
<artifactId>spring-boot-starter-data-redis</artifactId> <groupId>org.springframework.boot</groupId>
</dependency> <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId> <artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope> <scope>runtime</scope>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version> <version>8.0.29</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!--logback日志--> <!--logback日志-->
<dependency> <dependency>
<groupId>ch.qos.logback</groupId> <groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId> <artifactId>logback-classic</artifactId>
</dependency> </dependency>
<!-- 分页组件 PageInfo--> <!-- 分页组件 PageInfo-->
<dependency> <dependency>
<groupId>com.github.pagehelper</groupId> <groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId> <artifactId>pagehelper</artifactId>
<version>5.3.0</version> <version>5.3.0</version>
</dependency> </dependency>
<!--common 类--> <!--common 类-->
<dependency> <dependency>
<groupId>commons-codec</groupId> <groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId> <artifactId>commons-codec</artifactId>
<version>1.9</version> <version>1.9</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>commons-io</groupId> <groupId>commons-io</groupId>
<artifactId>commons-io</artifactId> <artifactId>commons-io</artifactId>
<version>2.6</version> <version>2.6</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>commons-lang</groupId> <groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId> <artifactId>commons-lang</artifactId>
<version>2.6</version> <version>2.6</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId> <artifactId>commons-lang3</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>
<artifactId>junit</artifactId> <artifactId>junit</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!--fastjosn--> <!--fastjosn-->
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId> <artifactId>fastjson</artifactId>
<version>1.2.83</version> <version>1.2.83</version>
</dependency> </dependency>
<!--druid--> <!--druid-->
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>druid</artifactId> <artifactId>druid</artifactId>
<version>1.2.6</version> <version>1.2.6</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency> <dependency>
<groupId>org.apache.httpcomponents</groupId> <groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId> <artifactId>httpclient</artifactId>
<version>4.5.9</version> <version>4.5.9</version>
</dependency> </dependency>
<!-- jwt--> <!-- jwt-->
<dependency> <dependency>
<groupId>io.jsonwebtoken</groupId> <groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId> <artifactId>jjwt</artifactId>
<version>0.9.1</version> <version>0.9.1</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt --> <!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
<dependency> <dependency>
<groupId>com.auth0</groupId> <groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId> <artifactId>java-jwt</artifactId>
<version>3.8.3</version> <version>3.8.3</version>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
</plugin> </plugin>
</plugins> <!-- pem文件不处理,原样读取-->
</build> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<!-- 过滤后缀为pem、pfx的证书文件 -->
<nonFilteredFileExtensions>
<nonFilteredFileExtension>pem</nonFilteredFileExtension>
<nonFilteredFileExtension>pfx</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
</build>
</project> </project>

37
src/main/java/cn/chjyj/szwh/utils/ApiTokenUtils.java

@ -2,6 +2,7 @@ package cn.chjyj.szwh.utils;
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.commons.codec.binary.Base64;
import java.security.Key; import java.security.Key;
import java.security.KeyFactory; import java.security.KeyFactory;
@ -78,12 +79,44 @@ public class ApiTokenUtils {
.compact(); .compact();
} }
/**
* 抽取公钥
* @param publicKey
* @return
* @throws NoSuchAlgorithmException
* @throws InvalidKeySpecException
*/
public static RSAPublicKey getPublicKey(String publicKey) throws NoSuchAlgorithmException, InvalidKeySpecException { public static RSAPublicKey getPublicKey(String publicKey) throws NoSuchAlgorithmException, InvalidKeySpecException {
return (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(org.apache.commons.codec.binary.Base64.decodeBase64(publicKey.getBytes()))); String publicKeyPEM = publicKey.replace("-----BEGIN PUBLIC KEY-----\r\n", "");
publicKeyPEM = publicKeyPEM.replace("-----END PUBLIC KEY-----", "");
Base64 b64 = new Base64();
byte [] decoded = b64.decode(publicKeyPEM);
X509EncodedKeySpec spec =
new X509EncodedKeySpec(decoded);
KeyFactory kf = KeyFactory.getInstance("RSA");
return (RSAPublicKey) kf.generatePublic(spec);
//return (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(org.apache.commons.codec.binary.Base64.decodeBase64(publicKey.getBytes())));
} }
/**
* 抽取私钥
* @param privateKey
* @return
* @throws Exception
*/
public static RSAPrivateKey getPrivateKey(String privateKey) throws Exception { public static RSAPrivateKey getPrivateKey(String privateKey) throws Exception {
return (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(org.apache.commons.codec.binary.Base64.decodeBase64(privateKey.getBytes()))); String privKeyPEM = privateKey.replace("-----BEGIN PRIVATE KEY-----\r\n", "");
privKeyPEM = privKeyPEM.replace("-----END PRIVATE KEY-----", "");
Base64 b64 = new Base64();
byte [] decoded = b64.decode(privKeyPEM);
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(decoded);
KeyFactory kf = KeyFactory.getInstance("RSA");
return (RSAPrivateKey)kf.generatePrivate(spec);
//return (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(org.apache.commons.codec.binary.Base64.decodeBase64(privateKey.getBytes())));
} }
public static Key stringToPublickKey(String key) throws NoSuchAlgorithmException, InvalidKeySpecException { public static Key stringToPublickKey(String key) throws NoSuchAlgorithmException, InvalidKeySpecException {

4
src/main/java/cn/chjyj/szwh/utils/SzFileUtils.java

@ -21,7 +21,9 @@ public class SzFileUtils {
String readLine = null; String readLine = null;
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
while ((readLine = br.readLine()) != null) { while ((readLine = br.readLine()) != null) {
sb.append(readLine); //剔除---
readLine.replace("-----\\w-----"," ");
sb.append(readLine+"\r\n");
} }
br.close(); br.close();
ins.close(); ins.close();

8
src/test/java/cn/chjyj/szwh/JwtRsaTokenTests.java

@ -1,6 +1,8 @@
package cn.chjyj.szwh; package cn.chjyj.szwh;
import cn.chjyj.szwh.constant.ChConstant; import cn.chjyj.szwh.constant.ChConstant;
import cn.chjyj.szwh.utils.ApiTokenUtils;
import cn.chjyj.szwh.utils.JwtUtils;
import cn.chjyj.szwh.utils.SzFileUtils; import cn.chjyj.szwh.utils.SzFileUtils;
import org.junit.Test; import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
@ -29,7 +31,11 @@ public class JwtRsaTokenTests {
String entr_prikey=prop.getProperty("entrust.pem.prikey.path");//私钥路径 String entr_prikey=prop.getProperty("entrust.pem.prikey.path");//私钥路径
// 私钥 // 私钥
String prinote = SzFileUtils.getKeyFromFile(ChConstant.WORK_DIR + "/" + entr_prikey); String prinote = SzFileUtils.getKeyFromFile(ChConstant.WORK_DIR + "/" + entr_prikey);
System.out.println("文件内容"+prinote); // System.out.println(prinote);
String iss ="test";
long exp =5 * 60 * 1000L;
String token = ApiTokenUtils.getToken(iss,prinote,exp);
System.out.println(token);
}catch (Exception ex){ }catch (Exception ex){
ex.printStackTrace(); ex.printStackTrace();
} }

Loading…
Cancel
Save