commit
c4e669cc40
@ -0,0 +1,33 @@ |
||||
HELP.md |
||||
target/ |
||||
!.mvn/wrapper/maven-wrapper.jar |
||||
!**/src/main/**/target/ |
||||
!**/src/test/**/target/ |
||||
|
||||
### STS ### |
||||
.apt_generated |
||||
.classpath |
||||
.factorypath |
||||
.project |
||||
.settings |
||||
.springBeans |
||||
.sts4-cache |
||||
|
||||
### IntelliJ IDEA ### |
||||
.idea |
||||
*.iws |
||||
*.iml |
||||
*.ipr |
||||
|
||||
### NetBeans ### |
||||
/nbproject/private/ |
||||
/nbbuild/ |
||||
/dist/ |
||||
/nbdist/ |
||||
/.nb-gradle/ |
||||
build/ |
||||
!**/src/main/**/build/ |
||||
!**/src/test/**/build/ |
||||
|
||||
### VS Code ### |
||||
.vscode/ |
@ -0,0 +1,114 @@ |
||||
<?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" |
||||
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> |
||||
<groupId>com.dky</groupId> |
||||
<artifactId>key-generate-tool</artifactId> |
||||
<version>0.0.1-SNAPSHOT</version> |
||||
<name>key-generate-tool</name> |
||||
<description>key-generate-tool</description> |
||||
<properties> |
||||
<java.version>1.8</java.version> |
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> |
||||
<spring-boot.version>2.6.13</spring-boot.version> |
||||
</properties> |
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-web</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-test</artifactId> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-jdbc</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-thymeleaf</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.mybatis.spring.boot</groupId> |
||||
<artifactId>mybatis-spring-boot-starter</artifactId> |
||||
<version>2.1.3</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>mysql</groupId> |
||||
<artifactId>mysql-connector-java</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.projectlombok</groupId> |
||||
<artifactId>lombok</artifactId> |
||||
<version>1.18.12</version> |
||||
<scope>provided</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.alibaba</groupId> |
||||
<artifactId>druid</artifactId> |
||||
<version>1.2.1</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.xmlunit</groupId> |
||||
<artifactId>xmlunit-core</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.mybatis</groupId> |
||||
<artifactId>mybatis</artifactId> |
||||
<version>3.4.6</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-devtools</artifactId> |
||||
<scope>runtime</scope> |
||||
<optional>true</optional> |
||||
</dependency> |
||||
</dependencies> |
||||
<dependencyManagement> |
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-dependencies</artifactId> |
||||
<version>${spring-boot.version}</version> |
||||
<type>pom</type> |
||||
<scope>import</scope> |
||||
</dependency> |
||||
</dependencies> |
||||
</dependencyManagement> |
||||
|
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.apache.maven.plugins</groupId> |
||||
<artifactId>maven-compiler-plugin</artifactId> |
||||
<version>3.8.1</version> |
||||
<configuration> |
||||
<source>1.8</source> |
||||
<target>1.8</target> |
||||
<encoding>UTF-8</encoding> |
||||
</configuration> |
||||
</plugin> |
||||
<plugin> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-maven-plugin</artifactId> |
||||
<version>${spring-boot.version}</version> |
||||
<configuration> |
||||
<mainClass>com.dky.KeyGenerateToolApplication</mainClass> |
||||
<skip>true</skip> |
||||
</configuration> |
||||
<executions> |
||||
<execution> |
||||
<id>repackage</id> |
||||
<goals> |
||||
<goal>repackage</goal> |
||||
</goals> |
||||
</execution> |
||||
</executions> |
||||
</plugin> |
||||
</plugins> |
||||
</build> |
||||
|
||||
</project> |
@ -0,0 +1,13 @@ |
||||
package com.dky; |
||||
|
||||
import org.springframework.boot.SpringApplication; |
||||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
|
||||
@SpringBootApplication |
||||
public class KeyGenerateToolApplication { |
||||
|
||||
public static void main(String[] args) { |
||||
SpringApplication.run(KeyGenerateToolApplication.class, args); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,21 @@ |
||||
package com.dky.controller; |
||||
|
||||
import com.dky.service.GenerateKey; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.stereotype.Controller; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
@Controller |
||||
public class GenerateKeyController { |
||||
@Autowired |
||||
GenerateKey generateKey; |
||||
@RequestMapping("/get_key") |
||||
public String getGenerateKey() { |
||||
Map map = new HashMap(); |
||||
map.put("name", "dky"); |
||||
return generateKey.generateKey(map); |
||||
} |
||||
} |
@ -0,0 +1,16 @@ |
||||
package com.dky.entity; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Data; |
||||
import lombok.NoArgsConstructor; |
||||
|
||||
@Data |
||||
@AllArgsConstructor |
||||
@NoArgsConstructor |
||||
public class KeyInfo { |
||||
public Integer id; |
||||
public String privateKey; |
||||
public String cpuId; |
||||
public String companyName; |
||||
public String key; |
||||
} |
@ -0,0 +1,7 @@ |
||||
package com.dky.service; |
||||
|
||||
import java.util.Map; |
||||
|
||||
public interface GenerateKey { |
||||
public String generateKey(Map map); |
||||
} |
@ -0,0 +1,5 @@ |
||||
package com.dky.service; |
||||
|
||||
public interface GetPrivateKey { |
||||
public String getPrivateKey(); |
||||
} |
@ -0,0 +1,54 @@ |
||||
package com.dky.service.Iml; |
||||
|
||||
import com.dky.service.GenerateKey; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import javax.crypto.BadPaddingException; |
||||
import javax.crypto.Cipher; |
||||
import javax.crypto.IllegalBlockSizeException; |
||||
import javax.crypto.NoSuchPaddingException; |
||||
import javax.crypto.spec.SecretKeySpec; |
||||
import java.nio.charset.StandardCharsets; |
||||
import java.security.InvalidKeyException; |
||||
import java.security.NoSuchAlgorithmException; |
||||
import java.security.NoSuchProviderException; |
||||
import java.util.Base64; |
||||
import java.util.Map; |
||||
|
||||
@Service |
||||
public class GenerateKeyIml implements GenerateKey { |
||||
private static final String SM4_KEY = "sm4demo123456789"; // 16 bytes key
|
||||
private static final String ALGORITHM = "SM4/ECB/PKCS5Padding"; |
||||
|
||||
@Override |
||||
public String generateKey(Map map) { |
||||
String key; |
||||
try { |
||||
Cipher cipher = Cipher.getInstance(ALGORITHM, "BC"); |
||||
SecretKeySpec secretKey = new SecretKeySpec(SM4_KEY.getBytes(StandardCharsets.UTF_8), "SM4"); |
||||
cipher.init(Cipher.ENCRYPT_MODE, secretKey); |
||||
byte[] encrypted = cipher.doFinal(mapToString(map).getBytes(StandardCharsets.UTF_8)); |
||||
key=Base64.getEncoder().encodeToString(encrypted); |
||||
} catch (NoSuchPaddingException e) { |
||||
throw new RuntimeException(e); |
||||
} catch (IllegalBlockSizeException e) { |
||||
throw new RuntimeException(e); |
||||
} catch (NoSuchAlgorithmException e) { |
||||
throw new RuntimeException(e); |
||||
} catch (BadPaddingException e) { |
||||
throw new RuntimeException(e); |
||||
} catch (NoSuchProviderException e) { |
||||
throw new RuntimeException(e); |
||||
} catch (InvalidKeyException e) { |
||||
throw new RuntimeException(e); |
||||
} |
||||
return key; |
||||
} |
||||
private static String mapToString(Map<String, String> map) { |
||||
StringBuilder sb = new StringBuilder(); |
||||
for (Map.Entry<String, String> entry : map.entrySet()) { |
||||
sb.append(entry.getKey()).append('=').append(entry.getValue()).append('&'); |
||||
} |
||||
return sb.toString(); |
||||
} |
||||
} |
@ -0,0 +1,14 @@ |
||||
package com.dky.service.Iml; |
||||
|
||||
import com.dky.service.GenerateKey; |
||||
|
||||
import java.util.Map; |
||||
|
||||
public class GetPrivateKeyIml implements GenerateKey { |
||||
@Override |
||||
public String generateKey(Map map) { |
||||
//都数据库mybatis
|
||||
|
||||
return null; |
||||
} |
||||
} |
@ -0,0 +1,20 @@ |
||||
server: |
||||
port: 8080 |
||||
|
||||
spring: |
||||
thymeleaf: |
||||
cache: false |
||||
datasource: |
||||
driver-class-name: com.mysql.jdbc.Driver |
||||
url: jdbc:mysql://localhost:3306/key_generate_tool?serverTimezone=GMT%2B8&useSSL=true |
||||
username: root |
||||
password: hwj_lyq |
||||
type: com.alibaba.druid.pool.DruidDataSource |
||||
mybatis: |
||||
mapper-locations: classpath:mapper/*.xml |
||||
devtools: |
||||
restart: |
||||
enabled: true |
||||
|
||||
|
||||
|
@ -0,0 +1,109 @@ |
||||
<html xmlns:th="http://www.thymeleaf.org"> |
||||
<meta charset="UTF-8"> |
||||
<head> |
||||
<title>密钥生成工具</title> |
||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> |
||||
<style> |
||||
body{ |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: center; |
||||
height: 100vh; |
||||
margin: 0; |
||||
} |
||||
.key-row { |
||||
margin-bottom: 10px; |
||||
} |
||||
.main{ |
||||
width: 50%; /* 调整这个值以改变div的宽度 */ |
||||
height: 50%; |
||||
background-color: #f32929; |
||||
color: #fff; |
||||
} |
||||
.title{ |
||||
text-align: center; |
||||
font-size: 15px; |
||||
} |
||||
.formdiv{ |
||||
display: flex; |
||||
width: 500px; |
||||
margin-top: 50px; |
||||
justify-content: center; |
||||
border: 1px solid #ccc; |
||||
margin:auto; |
||||
.key-form{ |
||||
margin-top: 20px; |
||||
} |
||||
} |
||||
.inputCpuid{ |
||||
height: 100px; |
||||
width: 320px; |
||||
border: 2px solid #ccc; |
||||
overflow-y: auto; |
||||
} |
||||
</style> |
||||
<script> |
||||
$(document).ready(function() { |
||||
// 处理复制按钮点击事件 |
||||
$('.copy-button').click(function() { |
||||
var privateKey = $(this).prev().val(); |
||||
copyTextToClipboard(privateKey); |
||||
alert('私钥已复制到剪贴板!'); |
||||
}); |
||||
|
||||
// 处理更换按钮点击事件 |
||||
$('.change-button').click(function() { |
||||
var privateKeyInput = $(this).parent().find('input[name="privateKey"]'); |
||||
var newPrivateKey = privateKeyInput.val(); |
||||
privateKeyInput.val(''); |
||||
$(this).before('<p class="key-row">私钥:' + newPrivateKey + '</p>'); |
||||
$(this).remove(); |
||||
}); |
||||
}); |
||||
|
||||
// 使用jQuery的copyTextToClipboard函数实现复制到剪贴板 |
||||
function copyTextToClipboard(text) { |
||||
var $textarea = $('<textarea>'); |
||||
$textarea.text(text); |
||||
$('body').append($textarea); |
||||
$textarea.select(); |
||||
document.execCommand('copy'); |
||||
$textarea.remove(); |
||||
} |
||||
</script> |
||||
</head> |
||||
<div class="main"> |
||||
<div class="title"><h1>密钥生成工具</h1></div> |
||||
<div class="formdiv"> |
||||
<form class="key-form" action="/generate" method="post"> |
||||
<div class="key-row"> |
||||
<label for="privateKey">私钥:</label> |
||||
<input type="text" name="privateKey" readonly> |
||||
<button class="copy-button">复制</button> |
||||
<button class="change-button">更换</button> |
||||
</div> |
||||
<div class="key-row"> |
||||
<label for="cpuid">cpuid:</label> |
||||
<div class="inputCpuid"> |
||||
<span>djiefieji;</span> |
||||
<span>djiefieji;</span> |
||||
<span>djiefieji;</span> |
||||
<span>djiefieji;</span> |
||||
</div> |
||||
<button type="button" onclick="addElement()">添加</button> |
||||
</div> |
||||
<div class="key-row"> |
||||
<div class="key-row"> |
||||
<label for="expiration">有效期:</label> |
||||
<input type="datetime-local" name="expiration"> |
||||
</div> |
||||
<div class="key-row"> |
||||
<label for="unitName">单位名称:</label> |
||||
<input type="text" name="unitName"> |
||||
</div> |
||||
<button type="submit">生成</button> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
</body> |
||||
</html> |
@ -0,0 +1,13 @@ |
||||
package com.dky; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
import org.springframework.boot.test.context.SpringBootTest; |
||||
|
||||
@SpringBootTest |
||||
class KeyGenerateToolApplicationTests { |
||||
|
||||
@Test |
||||
void contextLoads() { |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue