From bd4199d9c054ea4f2f2dc0687679cfb4d0d26835 Mon Sep 17 00:00:00 2001 From: free will <2647778488@qq.com> Date: Fri, 30 Jul 2021 10:38:56 +0800 Subject: [PATCH] =?UTF-8?q?SSL=E4=B8=AD=E7=9A=84=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E4=BD=93=E5=AD=97=E6=AE=B5=E7=94=B1Pubkey?= =?UTF-8?q?=E6=94=B9=E6=88=90Nonce?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/VMSConnection/TCPNet/SSL.java | 6 ++-- .../java/VMSConnection/TCPNet/TCPConn.java | 2 +- src/main/java/examples/VPNLoginExample.java | 29 ++++++++++++++----- src/test/java/VMSConnection/TestAPI.java | 8 +++-- 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/main/java/VMSConnection/TCPNet/SSL.java b/src/main/java/VMSConnection/TCPNet/SSL.java index b2221fc..97a8939 100644 --- a/src/main/java/VMSConnection/TCPNet/SSL.java +++ b/src/main/java/VMSConnection/TCPNet/SSL.java @@ -23,7 +23,7 @@ import java.util.Random; */ class SSL_SetupMessage extends BaseStruct { - public String Pubkey; + public String Nonce; public String Secretkey; } @@ -31,7 +31,7 @@ class SSL_Message extends BaseStruct { public int IsEncrypted=0; public int MType=0; public byte[] Data; - public String Pubkey=""; + public String Nonce =""; public int Code=0; } @@ -69,7 +69,7 @@ public class SSL { .substring(0,16); // 构造SSL_SetupMessage(公钥&密钥) SSL_SetupMessage sm=new SSL_SetupMessage(); - sm.Pubkey=pubKey; + sm.Nonce =pubKey; sm.Secretkey=secretKey; String data; try { diff --git a/src/main/java/VMSConnection/TCPNet/TCPConn.java b/src/main/java/VMSConnection/TCPNet/TCPConn.java index 7b8af3b..1293cec 100644 --- a/src/main/java/VMSConnection/TCPNet/TCPConn.java +++ b/src/main/java/VMSConnection/TCPNet/TCPConn.java @@ -171,7 +171,7 @@ public class TCPConn implements Conn{ } mes.Data=ans; if(this.role==1){ - mes.Pubkey=this.key.GetPubkey(); + mes.Nonce =this.key.GetPubkey(); } mes.Code=200; try { diff --git a/src/main/java/examples/VPNLoginExample.java b/src/main/java/examples/VPNLoginExample.java index ea4f597..daa78f6 100644 --- a/src/main/java/examples/VPNLoginExample.java +++ b/src/main/java/examples/VPNLoginExample.java @@ -7,19 +7,16 @@ import VMSConnection.Security.BC_KeyManager; import VMSConnection.TCPNet.Message.NetworkResponse; import VMSConnection.Utils.Base64Helper; import minsecurity.certificate.cert.CertException; -import minsecurity.certificate.cert.Certificate; import minsecurity.crypto.AsymKeyException; -import minsecurity.identity.Identity; import minsecurity.identity.IdentityException; import org.bouncycastle.crypto.CryptoException; -import security.KeyChain; import javax.crypto.BadPaddingException; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import java.nio.charset.StandardCharsets; import java.security.*; -import java.util.Arrays; + /* * @Author: Wang Feng @@ -33,7 +30,7 @@ public class VPNLoginExample { // 身份信息保存位置 public static String identityPath="D:\\TEST\\Identitys\\"; // 用户名 - public static String username="/freewill"; + public static String username="freewill111"; // VMS发送来的证书的密码 public static byte[] certPasswd="123456".getBytes(StandardCharsets.UTF_8); // 基于用户名的用户身份标识 @@ -41,7 +38,7 @@ public class VPNLoginExample { // 注册用户的IP public static String vms_ip="121.15.171.91"; // 注册邮箱 - public static String email="2555627323s@163.com"; + public static String email="2555627323s111@163.com"; /** * 生成本地密钥,持久化存储到本地硬盘 @@ -124,12 +121,28 @@ public class VPNLoginExample { // 2. 签名(签名用户名) & 公钥(用户本地保存的公钥) byte[] registerSign= vpnExample.signBytes(username); String pubKey=new String(KeyManagerExample.INSTANCE.getKeyChain().getCurrentIdentity().getPubkey() - .getBytes()); + .getBytes(),StandardCharsets.UTF_8); + System.out.println("pubkey: "+pubKey); + // 测试验签 + try { + boolean r=KeyManagerExample.INSTANCE.getKeyChain().getCurrentIdentity().verify( + username.getBytes(StandardCharsets.UTF_8),registerSign); + System.out.println("测试验签结果:"+r); + } catch (IdentityException | AsymKeyException e) { + e.printStackTrace(); + } + boolean rr=new BC_KeyManager().Verify(username.getBytes(StandardCharsets.UTF_8),new String(registerSign),pubKey); + System.out.println("测试验签结果2:"+rr); // 3. 构造注册请求包 RegisterWithSignRequest request=new RegisterWithSignRequest(1,username,"password", "15239970973","1234",email,"dev","", pubKey,0,0,"1625142358",registerSign); + try { + System.out.println("register request: "+request.toJson()); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } // 4. 调用bc-api,进行注册 BC_API bc_api=new BC_API(); @@ -180,6 +193,6 @@ public class VPNLoginExample { // 测试注册登录 public static void main(String[] args){ new VPNLoginExample().testRegister(); - new VPNLoginExample().testLogin(); +// new VPNLoginExample().testLogin(); } } diff --git a/src/test/java/VMSConnection/TestAPI.java b/src/test/java/VMSConnection/TestAPI.java index ae05d84..62c3bb3 100644 --- a/src/test/java/VMSConnection/TestAPI.java +++ b/src/test/java/VMSConnection/TestAPI.java @@ -34,8 +34,8 @@ public class TestAPI { // System.out.println(res); // } public static void main(String[] args){ - String username="/frasgASJGXUa2"; - String email="25SAUUKDsiahHk3s@163.com"; + String username="/fssASssJGXUa2ss"; + String email="25SAawhqeDsissssahHk3s@163.com"; int userID=1; // 模拟客户端生成自己的公钥私钥 BC_KeyManager bc_keyManager=new BC_KeyManager(); @@ -65,6 +65,10 @@ public class TestAPI { System.out.println("raw text: "+username); // return; + // 测试验签结果 +// boolean rr=new BC_KeyManager().Verify(username.getBytes(StandardCharsets.UTF_8),new String(sig),pubkey); +// System.out.println("测试验签结果2:"+rr); + // 这里对sig进行一次base64编码 // sig=Base64Helper.BlockChain_Base64Encode(sig).getBytes(StandardCharsets.UTF_8); //