From 437501f411bd12e35fb367cd6a646572d36deefb Mon Sep 17 00:00:00 2001 From: zhangmeng <1334717033@qq.com> Date: Sat, 6 May 2023 18:26:46 +0800 Subject: [PATCH] =?UTF-8?q?2023=E5=B9=B45=E6=9C=886=E6=97=A518:26:37?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CodecToolsController.java | 24 ++++ .../tools/controller/JksFileController.java | 118 ++++++++++++++++++ .../com/zhangmeng/tools/utils/JksUtils.java | 110 ++++++++++------ .../zhangmeng/tools/utils/ResourcesUtils.java | 2 +- src/main/resources/fxml/codec-tools.fxml | 17 ++- src/main/resources/fxml/home.fxml | 2 +- src/main/resources/fxml/jks-file.fxml | 28 +++++ 7 files changed, 261 insertions(+), 40 deletions(-) create mode 100644 src/main/java/com/zhangmeng/tools/controller/JksFileController.java diff --git a/src/main/java/com/zhangmeng/tools/controller/CodecToolsController.java b/src/main/java/com/zhangmeng/tools/controller/CodecToolsController.java index 9682901..da5b5ef 100644 --- a/src/main/java/com/zhangmeng/tools/controller/CodecToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/CodecToolsController.java @@ -562,4 +562,28 @@ public class CodecToolsController { public void maven_jar_install_menu_item(ActionEvent event) { load_small_tools(10); } + + public void jks_file_menu_item(ActionEvent event) { + + } + + public void music_parser_menu_item(ActionEvent event) { + + } + + public void word_ocr_menu_item(ActionEvent event) { + + } + + public void bar_code_menu_item(ActionEvent event) { + + } + + public void pdf_menu_item(ActionEvent event) { + + } + + public void batch_update_file_name_menu_item(ActionEvent event) { + + } } diff --git a/src/main/java/com/zhangmeng/tools/controller/JksFileController.java b/src/main/java/com/zhangmeng/tools/controller/JksFileController.java new file mode 100644 index 0000000..8ea7f34 --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/controller/JksFileController.java @@ -0,0 +1,118 @@ +package com.zhangmeng.tools.controller; + +import com.zhangmeng.tools.utils.AlertUtils; +import com.zhangmeng.tools.utils.ImagePath; +import com.zhangmeng.tools.utils.JksUtils; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.stage.DirectoryChooser; +import javafx.stage.Stage; + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-05-06 16:43 + */ +public class JksFileController { + + @FXML + public TextField dir; + + @FXML + public Button choose_file; + + + @FXML + public Button x509_gen; + + @FXML + public TextField jks_file_name; + + @FXML + public TextField cer_file_name; + + @FXML + public Button jks_gen; + + @FXML + public TextArea jks_public; + + @FXML + public TextArea cer_public; + + @FXML + public TextArea jks_private; + + + @FXML + public void initialize() { + choose_file.setText(null); + ImageView iv = new ImageView(new Image(ImagePath.path(ImagePath.ImagePathType.IMAGE_FILE))); + iv.setPreserveRatio(true); + iv.setFitWidth(18); + choose_file.setGraphic(iv); + + choose_file.setOnAction(event -> { + Stage stage = new Stage(); + DirectoryChooser dc = new DirectoryChooser(); + dc.setTitle("文件夹选择器"); + File file = dc.showDialog(stage); + if (file != null) { + String path = file.getAbsolutePath(); + dir.setText(path); + } + }); + + x509_gen.setOnAction(event -> { + + if (dir.getText().length() == 0) { + AlertUtils.alert_warning("文件夹不能为空!"); + return; + } + + String content = JksUtils.GetCertFile.x509Certificate(dir.getText()); + cer_public.setText(content); + + }); + + jks_gen.setOnAction(event -> { + + if (dir.getText().length() == 0) { + AlertUtils.alert_warning("文件夹不能为空!"); + return; + } + + if (jks_file_name.getText().length() == 0) { + AlertUtils.alert_warning("jks文件名不能为空!"); + return; + } + + JksUtils.GetJksAndCerFile.jks_cer(dir.getText() + jks_file_name.getText(), "123456", "123456", dir.getText() + cer_file_name.getText()); + Path path = Paths.get(dir.getText() + jks_file_name.getText()); + Path path2 = Paths.get(dir.getText() + cer_file_name.getText()); + + try { + while (true){ + if (Files.exists(path) && Files.exists(path2)){ + break; + } + } + + JksUtils.GetJksAndCerFile.readJks(dir.getText() + jks_file_name.getText(), "123456"); + JksUtils.GetJksAndCerFile.readCer(dir.getText() + cer_file_name.getText()); + } catch (Exception e) { + e.printStackTrace(); + } + + }); + } +} diff --git a/src/main/java/com/zhangmeng/tools/utils/JksUtils.java b/src/main/java/com/zhangmeng/tools/utils/JksUtils.java index 672f859..7f591f8 100644 --- a/src/main/java/com/zhangmeng/tools/utils/JksUtils.java +++ b/src/main/java/com/zhangmeng/tools/utils/JksUtils.java @@ -1,18 +1,24 @@ package com.zhangmeng.tools.utils; +import lombok.extern.slf4j.Slf4j; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.util.encoders.Base64; import org.bouncycastle.x509.X509V3CertificateGenerator; import javax.security.auth.x500.X500Principal; +import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.math.BigInteger; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.security.*; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; +import java.text.SimpleDateFormat; import java.util.Date; import java.util.Enumeration; @@ -21,6 +27,7 @@ import java.util.Enumeration; * @version : 1.0 * @date : 2023-04-23 09:17 */ +@Slf4j public class JksUtils { public static class GetCertFile { @@ -30,14 +37,25 @@ public class JksUtils { //证书使用者 static String CertificateUser = "C=中国,ST=广东,L=广州,O=人民组织,OU=人民单位,CN="; - public static void main(String[] args) { + public static String x509Certificate(String dir){ + Path path = Paths.get(dir + file_name() + ".cer"); try { - X509Certificate cert = getCert(); - System.out.println(cert.toString()); + if (!Files.exists(path)){ + Files.createFile(path); + } + X509Certificate cert = getCert(path.toFile()); + return cert.toString(); } catch (Exception e) { e.printStackTrace(); } + return null; } + + public static String file_name(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); + return sdf.format(new Date()); + } + /* * CN(Common Name名字与姓氏) * OU(Organization Unit组织单位名称) @@ -45,8 +63,10 @@ public class JksUtils { * ST(State州或省份名称) * C(Country国家名称) * L(Locality城市或区域名称) + * + * "F:\\cer.cer" * */ - public static X509Certificate getCert() throws Exception { + public static X509Certificate getCert(File file) throws Exception { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(1024); KeyPair keyPair = keyPairGenerator.generateKeyPair(); @@ -70,7 +90,7 @@ public class JksUtils { Security.addProvider(new BouncyCastleProvider()); X509Certificate x509Certificate = x509V3CertificateGenerator.generateX509Certificate(keyPair.getPrivate(), "BC"); //写入文件 - FileOutputStream fos = new FileOutputStream("F:\\cer.cer"); + FileOutputStream fos = new FileOutputStream(file); fos.write(x509Certificate.getEncoded()); fos.flush(); fos.close(); @@ -80,31 +100,33 @@ public class JksUtils { public static class GetJksAndCerFile { - public static void main(String[] args) { - buildKeyAndSaveToJksFile(); - exportCerFile(); - try { - readJks(); - readCer(); - } catch (Exception e) { - e.printStackTrace(); - } + public static void jks_cer(String file,String keypass,String storepass,String cer_file) { + buildKeyAndSaveToJksFile(file, keypass, storepass); + exportCerFile(file,cer_file); +// try { +// readJks(file,keypass); +// readCer(cer_file); +// } catch (Exception e) { +// e.printStackTrace(); +// } } - public static void executeCommand(String[] arstringCommand) { try { Runtime.getRuntime().exec(arstringCommand); - - } catch (Exception e) { - System.out.println(e.getMessage()); + log.error(e.getMessage()); } } - + /** + * + * @param file //f:/demo.jks + * @param keypass 123456 + * @param storepass 123456 + */ //生成密钥并保存到jks文件 - public static void buildKeyAndSaveToJksFile() { + public static void buildKeyAndSaveToJksFile(String file,String keypass,String storepass) { String[] command = new String[]{ "cmd ", "/k", @@ -124,11 +146,11 @@ public class JksUtils { "-validity", // 有效天数 "36500", "-keypass",// 密钥口令(私钥的密码) - "123456", + keypass, "-keystore", //密钥库名称(jks文件路径) - "f:/demo.jks", + file, "-storepass", // 密钥库口令(jks文件的密码) - "123456", + storepass, "-v"// 详细输出(秘钥库中证书的详细信息) }; executeCommand(command); @@ -136,7 +158,7 @@ public class JksUtils { //从jks文件中导出证书文件 - public static void exportCerFile() { + public static void exportCerFile(String jks_file,String cer_file) { String[] command = new String[]{ "cmd ", "/k", "start", // cmd Shell命令 @@ -146,43 +168,61 @@ public class JksUtils { "-alias", // -alias指定别名,这里是ss "sun", "-keystore", // -keystore指定keystore文件,这里是d:/demo.keystore - "f:/demo.jks", + jks_file, "-rfc", "-file",//-file指向导出路径 - "f:/demo.cer", + cer_file, "-storepass",// 指定密钥库的密码 "123456" }; executeCommand(command); - } + public static class JKSInfo{ + private String private_key; + private String public_key; + + public String getPrivate_key() { + return private_key; + } + + public void setPrivate_key(String private_key) { + this.private_key = private_key; + } + + public String getPublic_key() { + return public_key; + } + + public void setPublic_key(String public_key) { + this.public_key = public_key; + } + } //读取jks文件获取公、私钥 - public static void readJks() throws Exception { + public static void readJks(String file,String keypass) throws Exception { KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); - keyStore.load(new FileInputStream("f:\\demo.jks"), "123456".toCharArray()); + keyStore.load(new FileInputStream(file), keypass.toCharArray()); Enumeration aliases = keyStore.aliases(); String alias = null; while (aliases.hasMoreElements()) { alias = aliases.nextElement(); } - System.out.println("jks文件别名是:" + alias); + log.info("jks文件别名是:" + alias); PrivateKey key = (PrivateKey) keyStore.getKey(alias, "123456".toCharArray()); System.out.println("jks文件中的私钥是:" + new String(Base64.encode(key.getEncoded()))); Certificate certificate = keyStore.getCertificate(alias); PublicKey publicKey = certificate.getPublicKey(); - System.out.println("jks文件中的公钥:" + new String(Base64.encode(publicKey.getEncoded()))); + log.info("jks文件中的公钥:" + new String(Base64.encode(publicKey.getEncoded()))); } //读取证书文件获取公钥 - public static void readCer() throws Exception { + public static void readCer(String file) throws Exception { CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); - Certificate certificate = - certificateFactory.generateCertificate(new FileInputStream("f:\\demo.cer")); + Certificate certificate = certificateFactory.generateCertificate(new FileInputStream(file)); PublicKey publicKey = certificate.getPublicKey(); - System.out.println("证书中的公钥:" + new String(Base64.encode(publicKey.getEncoded()))); + log.info("证书中的公钥:" + new String(Base64.encode(publicKey.getEncoded()))); } } } diff --git a/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java index 0f89fe5..2875ed6 100644 --- a/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java +++ b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java @@ -51,7 +51,7 @@ public class ResourcesUtils { public enum Menu { Md5("md5加密", 0), SpringSecurity("spring加密", 1), - Jks_File("spring加密", 2), + Jks_File("Jks_File", 2), ; diff --git a/src/main/resources/fxml/codec-tools.fxml b/src/main/resources/fxml/codec-tools.fxml index e1893f2..b53ed8f 100644 --- a/src/main/resources/fxml/codec-tools.fxml +++ b/src/main/resources/fxml/codec-tools.fxml @@ -15,8 +15,9 @@ - + + + @@ -24,6 +25,7 @@ + @@ -39,6 +41,10 @@ + + + + @@ -51,10 +57,11 @@ - + + @@ -72,6 +79,10 @@ + + + + diff --git a/src/main/resources/fxml/home.fxml b/src/main/resources/fxml/home.fxml index 08f2ccb..8bc1fe3 100644 --- a/src/main/resources/fxml/home.fxml +++ b/src/main/resources/fxml/home.fxml @@ -84,7 +84,7 @@ - + diff --git a/src/main/resources/fxml/jks-file.fxml b/src/main/resources/fxml/jks-file.fxml index e69de29..baf8943 100644 --- a/src/main/resources/fxml/jks-file.fxml +++ b/src/main/resources/fxml/jks-file.fxml @@ -0,0 +1,28 @@ + + + + + + + + + + + +