diff --git a/ndn/pid/pib.db b/ndn/pid/pib.db index 611dc81..6e67365 100644 Binary files a/ndn/pid/pib.db and b/ndn/pid/pib.db differ diff --git a/ndn/settings.properties b/ndn/settings.properties index 1670681..0d69792 100644 --- a/ndn/settings.properties +++ b/ndn/settings.properties @@ -1,5 +1,5 @@ #\u4FEE\u6539\u914D\u7F6E\u6587\u4EF6 -#Tue Apr 07 23:50:28 CST 2020 +#Wed Apr 08 00:41:05 CST 2020 KeyName=/testKey_v3 loginUserName=466D1203678EFB16BE85C8A02E1486B6 ndnBlockChainIPAddress=116.77.74.139 @@ -7,6 +7,6 @@ ServerIPAddress=116.77.74.139 ThreadNumberForFileTransfer=5 ndnBlockChainPortAddress=9001 DataPackagePrefix=/ndn/edu/pkusz/OA -LoginStatus=false +LoginStatus=true loginPassWord=A1B9652D9ED940B8FC63453C50CB3337 ServerPortAddress=6363 diff --git a/ndn/tpm/4bf40577134e106bdac0ebb5398fb41938357b0332f9f83a51ea0559745980b7.privkey b/ndn/tpm/4bf40577134e106bdac0ebb5398fb41938357b0332f9f83a51ea0559745980b7.privkey new file mode 100644 index 0000000..849905f --- /dev/null +++ b/ndn/tpm/4bf40577134e106bdac0ebb5398fb41938357b0332f9f83a51ea0559745980b7.privkey @@ -0,0 +1,25 @@ +MIIEpAIBAAKCAQEA0vBF+wW8jIH+LMy+PYXQ24NBoEf5YIM1oX1YZwQ8S8PI8b/P +e98fmRNdLBFLXbiRQLealwgwxyvv2KRceQM5bKIS6UkPfcJwRIn+E3UBgB+7HBn9 +bpQr0ZtkHnHtt2baxVHyI2sQgrGg26u2McdzagmzvcWlF82iT2MpUTpXU1f+fpZj +pKwcwAuuF77CM4k3YN63G7b9m8Kuo5/AsTSAUBZ9RfzHV9f/nWv/lh8SQ915EAPO +15F3kArz55T/zX8Fi+cqzbDcRCqauVEETVQuz9FYzTb92bqWG67Uz5199adrJvXL +VDXn9SzNAEUYgztwYSbtGYcZxQMyN508N4/kmwIDAQABAoIBAQC8ZtyqWzJP8R87 +lldojefA2Fg6N27WM/sn1NOrl03fgewteFtyURRg3bm/TWcaO2qI+jR6J1eh3W1o ++0yYzTdx/sSTVq0ebxdlMDcd28jOTgkKDXCdXnxQx9DBnJJs19IYoZt65PqnMM3y +xkiB55n/INFIc4qEWydYbsINieVLStKfVc7KGM2Jtk237Em4DOd012bZnvfSqRhb +2vKotNqOHOvQDuC5JVgGIGXDMQQrLp2gSDZeBLaArQA3bddmbRd6vACDH8Y3EAL2 +HyxOMaS384NolPl0S91J9Q/Qu6OeGpn/82t6412KQr/7P+FP/fX1KvqzBG8OEdpA +ysv0ZXHxAoGBAOt6kgCYvUMfuT6JrSpgjIflfy3/gRML1rFoV34k+lg8+njNutfe +XJT0XXqkROR8HAnYqNo9LomaA5wblxs7+IVtRf59oy2ENkNTPTpTZhNbhEQDQ9Zy +XHQ18z1Afekt+3BgJh24PI/+uxukvQWtm4yhUsHwxmQvOzw+76VuE1tJAoGBAOVS +OKho9CgdRbCMPrYObaQJp8KXItHgLM7bD4Q78QSmW2tyd+05+rJLo1A5fYjQFWaz +mfTi5vzt/y/bSjOas/92Uu01Jq4GSG8ca0YMrMkm7wht199Gj6DqlNcBcYMK2Nis +pJ6g/JUcCpnJ/PBBD8RjAcVqTA9veXS5bdM/ynzDAoGBANqn8yD4s2277HBkuVZL +VtLtyN22jm1YJeCQigXJYmlDHjXEm0XN5dwu2QqDtLERiZufApO8EhWV3No9SF/y +nP+Qi1kX4sjmJtj3VzhsrrE03qmk+n4LrUv/uMDcvM4kc4FS1rHsHNh86dNuclLu +dSzttAIAiMgIj5GOw0qy3uh5AoGANDTrwStjql4/p1nGTRwrydSI5LwTqUQn70/f +0HL1A+H7nhKJSvCQKlcd7v2nnqYAuUjaG+4sOBjWp8Z8thLaN6ZwaqBXFfdINkN6 +CJCKJaE/eePH6YTe3fuJtwkVFog5pdpn/9UWq7uejjR16RxmwobnuFHizwDJ3dD5 +N8amCpECgYASKJLCApJPcRmjhFTmVn36qQEZuZBbHSIrwt7s0HC8HUR77PmN0xk9 +AxeJCqoVyM8jdUN8AjBWmlzo+PAGW6Dt86BZnEaYdtCQ6Zc/svPmmxqN5jJVyIft +w7J3Vt4w0i280wWIhj8gSTD2+5K6eYsEf2lbrf7xhQkZ/yG4bDb+Dg== diff --git a/ndn/tpm/73ec61f8ef708a0270c66be17591104773a16072dcdc78b2a0969d6538c83708.privkey b/ndn/tpm/73ec61f8ef708a0270c66be17591104773a16072dcdc78b2a0969d6538c83708.privkey deleted file mode 100644 index 09fc399..0000000 --- a/ndn/tpm/73ec61f8ef708a0270c66be17591104773a16072dcdc78b2a0969d6538c83708.privkey +++ /dev/null @@ -1,25 +0,0 @@ -MIIEowIBAAKCAQEAii65kmHV3SpcX7rdwXziznKJBZb8ns8+RkDh9YOV47PPtFbr -Yi2W9nWRj/S1XGnPopNXJ3cxyVQvoKchenkjDLRBdJkVn8Emowf/xVh4q4roP08c -aZzfd5KV88Sd2+zRkiiwN+teNdYaY+qdpekOAICkbUkNhuzk/mfa++hZRXpfQR44 -TrFiXea+Y6JRLWTwCm55SMKsLYekoIkH0CcVBcsTwcD7fb1ceklUzAGnVNesnd4d -8t7FkoWjYOjRDD+3IJs4JGz3ga1Vp6K5d2u/WdtANY2iUjTMY/S/hGLsiut7rswr -8HpuUY9Z8nWLdKt1vFxpXDoTUx0NCaVazMn4XwIDAQABAoIBAFtoh1efIpM4R30I -J1OsYnjA6YVqGNiRLZfZqd/4WLoVI4wfh3wdvmRw54a8ERD96d2Y7CluPt/4sbzr -ckkLQzVPNJGGBvj0E7P7QaXxXXnU3MesdJYksOrvbASihu6J3SR7h/6l0193r2Nz -OzAaWCna72pfzfP4V483cnP7grpjOXXfme7GxltI6I0sw16qCkg5COM2WfNYu0Gz -Z21ss0i3Tx5Kauzrht/GsvxoUz8G+Ufo0vCK9Qb/Cd+2+CzoBUpkB5JLClGq5G7Y -S/JFsTzlBMLmD0Deg72pOuURDQ7m7YAzv+F604mmWMj61mzM0AogZ2DiEDxxsazJ -8RSPs7ECgYEA36TAGc4/QGl4OoiJpt3Kzw5lixElX5qrZ0Yz5SEZMhyXX2gZ+zRM -HBJlp/vH5Sbs2qe7xvmr/B+W+pMqlLVAd7sJxGF7H9t83R1+XkN1a3vfW8h5V6c9 -EC9cTfDB/JGecmkBSHRRNgvp0eGzUOQTF9COpPhxLL4k/HFvQWOxPicCgYEAniyx -Eut2zwG6bMpWCGkjie7IPAy8m0WEsbz0RNbjggBXGB4k9axv75yVEaWQ45Z84n2D -B4BpdsXtRD4m34gPhs8+DM5C0G9aqV0it0VEGvyQgvzrpwjSxyuGitMjK/UMpUU9 -7HWSn8o+jSpb8ha+bPYnE9WJTA/9EM9p5JTRjwkCgYAJBciKQfvjSV4EXoXPKZuJ -BvepyKNNXBwWKorlb5RopSamPrjtnYqEh2l6gXnrEMr1d1boDCKYJV4d9dn97eIP -8ofOWHBzNJOxCAOVIfuWvoSgW1Ip6yFXidGbg18QJX/S9dGLbsXn/EsOoKBvXwQ2 -Lb/TgAJw36r2VE08whzgeQKBgHOZpBx4vE8UK0SBKBljhda0DeFdSaaNSyp/N2Ls -Tj/fscdtmIN4cCKFpKjOATNj84ewRUgBQJLOmtZqOgzaKsbSxb2kLU6aY38uE0Yw -OFMkzRT+ddeQ6kMn+1+Qab8hjAlprpUXZH6l18th7uriVm/aArtLL9nIQaK8g97M -KM/JAoGBAKdQPJSEPTz6p1HIkLwbI6i5ZcrxnS/fPTlwZEi2I8Ka7pnelOfED5qd -nvlLBKqIYWQLqCWwqA3I6pgM4ES1X10fsVhoA2jHlRj1/DOyy6gWwLAPacZ5cCBa -RBn9bPLKA/86mO9GiT4UaTeTH1mi+JbS5RwAl556n0cV0o3aKYkX diff --git a/resources/images/headPhotos/testWefree990128.png b/resources/images/headPhotos/testWefree990128.png new file mode 100644 index 0000000..8b8296b Binary files /dev/null and b/resources/images/headPhotos/testWefree990128.png differ diff --git a/src/main/java/cn/minoa/view/login/LoginOverviewController.java b/src/main/java/cn/minoa/view/login/LoginOverviewController.java index 301c3cd..1e58c71 100644 --- a/src/main/java/cn/minoa/view/login/LoginOverviewController.java +++ b/src/main/java/cn/minoa/view/login/LoginOverviewController.java @@ -244,6 +244,28 @@ public class LoginOverviewController { return (long)-1; } + public void delTempChild(File file){ + if (file.isDirectory()) { + String[] children = file.list();//获取文件夹下所有子文件夹 + // 递归删除目录中的子目录下 + for (int i = 0; i < children.length; i++) { + delTempChild(new File(file, children[i])); + } + } + // 目录空了,进行文件删除 + file.delete(); + } + + // 删除本地的ndn/pid和ndn/tpm两个文件夹 + private void moveNdnKeyFile(){ + String dirpath1="./ndn/pid"; + String dirpath2="./ndn/tpm"; + File f1 = new File(dirpath1); + File f2 = new File(dirpath2); + delTempChild(f1); + delTempChild(f2); + } + // 导入密钥 @FXML private void importSafeBag(){ @@ -279,6 +301,9 @@ public class LoginOverviewController { }else{ return ; } + // 做一个清空本地密钥的动作 +// moveNdnKeyFile(); +// System.out.println("本地密钥文件已清空"); // 将所选文件导入密钥 String res= SecretKeyManageUtil.importSafeBag(file.getAbsolutePath()); if(res.equals("success")){ diff --git a/src/main/java/cn/minoa/view/login/RegisterOverviewController.java b/src/main/java/cn/minoa/view/login/RegisterOverviewController.java index 1548cb1..03ad68a 100644 --- a/src/main/java/cn/minoa/view/login/RegisterOverviewController.java +++ b/src/main/java/cn/minoa/view/login/RegisterOverviewController.java @@ -1,8 +1,12 @@ package cn.minoa.view.login; import cn.minoa.MainApp; +import cn.minoa.dataRequestInterface.KeyManager; +import cn.minoa.dataRequestInterface.MinoaDataAPI; import cn.minoa.dataRequestInterface.OrderInfo; import cn.minoa.dataRequestInterface.ResponseData; +import cn.minoa.util.EncryptionUtil; +import cn.minoa.util.KeyStorageUtil; import cn.minoa.util.StringByteLengthUtil; import javafx.fxml.FXML; import javafx.scene.control.Alert; @@ -11,6 +15,13 @@ import javafx.scene.control.TextField; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.stage.Stage; +import net.named_data.jndn.security.KeyChain; +import net.named_data.jndn.security.pib.Pib; +import net.named_data.jndn.security.pib.PibImpl; +import net.named_data.jndn.security.tpm.Tpm; +import net.named_data.jndn.security.tpm.TpmBackEnd; +import net.named_data.jndn.security.v2.CertificateV2; +import net.named_data.jndn.util.Common; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -52,13 +63,56 @@ public class RegisterOverviewController { @FXML private void handleRegister() { if (isRightContent()) { + // 先拿到用户名,并修改keyChainNameString + String username=nickname.getText().trim(); + String keyChainNameString="/"+username; // 请求数据 OrderInfo orderInfo = new OrderInfo(); ResponseData responseData = new ResponseData(); Long seqLong = mainApp.getNewDataReqId(); orderInfo.setSeq(seqLong); - orderInfo.setJsonString(getRegisterJson()); + // 生成本地pid.db文件,获取公钥 + String publicKey=""; + try { + CertificateV2 certificateV2= KeyManager.INSTANCE.initKeyChain(keyChainNameString).getCertification(keyChainNameString); + publicKey = Common.base64Encode(certificateV2.wireEncode().getImmutableArray(), false); + System.out.println("本地密钥keyName:"+keyChainNameString); + System.out.println("publicKey: "+publicKey); + } catch (Pib.Error | PibImpl.Error | Tpm.Error | TpmBackEnd.Error | CertificateV2.Error | KeyChain.Error error) { + error.printStackTrace(); + // 弹窗报错 + // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ + Alert alert = new Alert(Alert.AlertType.INFORMATION); + alert.setTitle("注册失败"); + alert.setHeaderText("注册账号失败"); + alert.setContentText("本地密钥生成失败:\n"+error.getMessage()); + alert.showAndWait(); + return ; + } + // 首先向区块链发送注册信息 + String pubkey=publicKey; +// String pubkey = "Bv0CIgcvCAVsbGFhYQgDS0VZCAhyVwiW+kaX7QgMY2VydC1yZXF1ZXN0CAn9AAABcSP8KDIUCRgBAhkEAiVRABX9AU8wggFLMIIBAwYHKoZIzj0CATCB9wIBATAsBgcqhkjOPQEBAiEA/////wAAAAEAAAAAAAAAAAAAAAD///////////////8wWwQg/////wAAAAEAAAAAAAAAAAAAAAD///////////////wEIFrGNdiqOpPns+u9VXaYhrxlHQawzFOw9jvOPD4n0mBLAxUAxJ02CIbnBJNqZnjhE50mt4GffpAEQQRrF9Hy4SxCR/i85uVjpEDydwN9gS3rM6D0oTlF2JjClk/jQuL+Gn+bjufrSnwPnhYrzjNXazFezsu2QGg3v1H1AiEA/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVECAQEDQgAEgCbgPaAk0RRziBAW/beuF5fBQdJdbZhtKrT+FRdXq6sqPxvhM3VQF+WrBehiA5TsKpLzwzNoE8kKt8gyevM4dxZHGwEDHBgHFggFbGxhYWEIA0tFWQgIclcIlvpGl+39AP0m/QD+DzIwMjAwMzI5VDAxNTEwMf0A/w8yMDIwMDQwOFQwMTUxMDAXSDBGAiEApxH8lJntSBM/NwV+laSdifH674+76xZnxVF4vKGaXXkCIQCj3OyzagvjqYrJmZ9f00PWVISXRyrIrKmwFbwzsk/hQw=="; + String phonenumber=phoneNumber.getText().trim(); + NDNBlockChainConnectClient ndnBlockChainConnectClient=new NDNBlockChainConnectClient(); + String resString=ndnBlockChainConnectClient.registeNewUser(username, + phonenumber,pubkey); + if(resString.equals("true")){ + System.out.println("用户【"+username+"】在区块链后台被成功注册"); + }else{ + System.out.println("区块链后台注册用户【"+username+"】失败: "+resString); + // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("区块链注册失败"); + alert.setHeaderText("区块链注册失败"); + alert.setContentText("失败原因:\n"+resString); + alert.showAndWait(); + return ; + } + // 获取注册时JSON + String registerJson=getRegisterJson(publicKey); + orderInfo.setJsonString(registerJson); System.out.println("getRegisterJson: " + orderInfo.getJsonString()); + // 向系统后台发送注册信息 mainApp.minoaDataAPI.executeOrder("/register", orderInfo); responseData = mainApp.minoaDataAPI.dataCacheQueue.getResponseDataBySeq(seqLong); JSONObject jsonObject = responseData.praseRequestData(); @@ -74,6 +128,9 @@ public class RegisterOverviewController { if (codeInteger == 200) { // 注册之后,使用getNews消耗掉新通知 makeNoticesBeRead(); + // 将此时的keyChainName持久化到本地 + MinoaDataAPI.keyChainNameString=keyChainNameString; + KeyStorageUtil.setKeyName(keyChainNameString); // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("注册成功"); @@ -86,7 +143,8 @@ public class RegisterOverviewController { Alert alert = new Alert(Alert.AlertType.WARNING); alert.setTitle("注册失败"); alert.setHeaderText("注册失败"); - alert.setContentText("请确保你输入的手机号在系统白名单中,且登录名/账户/昵称并没有被注册。"); + alert.setContentText("请确保你输入的手机号在系统白名单中,且登录名/账户/昵称并没有被注册过。\n " + + "您可以将用户名适当复杂化,以保证其在系统中的唯一性。"); alert.showAndWait(); } } @@ -237,12 +295,14 @@ public class RegisterOverviewController { } // 获取注册请求字符串 - private String getRegisterJson() { + private String getRegisterJson(String mPubKey) { JSONObject jsonObject = new JSONObject(); - String mPubKey = "Bv0CsQcuCAR3Z2gwCANLRVkICH9+4yjVUHZaCAxjZXJ0LXJlcXVlc3QICf0AAAFv\nEUSBehQJGAECGQQANu6AFf0BJjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBANbFutCAZqFjHEa16tYvy4lBgi9/zixKWQzE9I72vaG2Imym+6KR30qkAQOK\nh0uE5RD2YsGhRK99rde+JOqIfk2/sunhp4nctOS5f4DeuOty58ekrO+Co9ZFmNBI\nmyk5i/hakjBEd/vdD7b1VadDRep5mWs3rgCinZOUfVaZ4oKqSws7ZWMvOSlRMOOi\nVzj53P4poY109S6aWmi3xKw/D76vfJapjdOB9Dg7S3rz0Rve1F/ajHCXWLt4XU3k\nUCiBn3Qmt6UD/MyDBaaUCfOvHTN6yVPtN6aOtYJVBAWt/P1ahLYhWkSm6KvrwMt0\nRzy2lw/lPriT99REItc/0wK6XwkCAwEAARZGGwEBHBcHFQgEd2doMAgDS0VZCAh/\nfuMo1VB2Wv0A/Sb9AP4PMjAxOTEyMTdUMDAzMTQw/QD/DzIwMTkxMjI3VDAwMzEz\nORf9AQCM+8WROXfi8WD9DydfLuSUxV0v3KW/Gn422/puDrkwwi1R2ogsAUc2O8pp\npuMLjWrQOTgE6ZTg80uWoDSUjjk44aMjkL2SAfp62vHRbGFx7+dckHAtF+DS6NH7\nX2vojFHOg6fksOE1M7XqLHmEEctZrFVSnQO7nB3DfRg+BqzZC/iy+8YAvTIvqA1c\nNsKYkmNITB80aM1v2H7fKnV4ZJpZnW71G5vbaPUseeklalQ2vEuBgWdd/1PL/0Ml\nI52npzqoeKAEpLp+vBwGN5ryGtWKB12nNimpMfevQAn/9BVIg59lZ7DIlE0sWmgW\nnwDxIXKebdViOejHlKwNAykxRRWw"; +// String mPubKey = "Bv0CsQcuCAR3Z2gwCANLRVkICH9+4yjVUHZaCAxjZXJ0LXJlcXVlc3QICf0AAAFv\nEUSBehQJGAECGQQANu6AFf0BJjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBANbFutCAZqFjHEa16tYvy4lBgi9/zixKWQzE9I72vaG2Imym+6KR30qkAQOK\nh0uE5RD2YsGhRK99rde+JOqIfk2/sunhp4nctOS5f4DeuOty58ekrO+Co9ZFmNBI\nmyk5i/hakjBEd/vdD7b1VadDRep5mWs3rgCinZOUfVaZ4oKqSws7ZWMvOSlRMOOi\nVzj53P4poY109S6aWmi3xKw/D76vfJapjdOB9Dg7S3rz0Rve1F/ajHCXWLt4XU3k\nUCiBn3Qmt6UD/MyDBaaUCfOvHTN6yVPtN6aOtYJVBAWt/P1ahLYhWkSm6KvrwMt0\nRzy2lw/lPriT99REItc/0wK6XwkCAwEAARZGGwEBHBcHFQgEd2doMAgDS0VZCAh/\nfuMo1VB2Wv0A/Sb9AP4PMjAxOTEyMTdUMDAzMTQw/QD/DzIwMTkxMjI3VDAwMzEz\nORf9AQCM+8WROXfi8WD9DydfLuSUxV0v3KW/Gn422/puDrkwwi1R2ogsAUc2O8pp\npuMLjWrQOTgE6ZTg80uWoDSUjjk44aMjkL2SAfp62vHRbGFx7+dckHAtF+DS6NH7\nX2vojFHOg6fksOE1M7XqLHmEEctZrFVSnQO7nB3DfRg+BqzZC/iy+8YAvTIvqA1c\nNsKYkmNITB80aM1v2H7fKnV4ZJpZnW71G5vbaPUseeklalQ2vEuBgWdd/1PL/0Ml\nI52npzqoeKAEpLp+vBwGN5ryGtWKB12nNimpMfevQAn/9BVIg59lZ7DIlE0sWmgW\nnwDxIXKebdViOejHlKwNAykxRRWw"; String commandString = "/register"; String userNameString = nickname.getText().trim(); String passWordString = passwordField1.getText().trim(); + // 对密码进行加密 + passWordString= EncryptionUtil.getMD5String(passWordString); String phoneString = phoneNumber.getText().trim(); Integer levelInteger = 0; try { @@ -261,12 +321,22 @@ public class RegisterOverviewController { // 验证输入内容格式 private boolean isRightContent() { //验证昵称是否为空 - if (nickname.getText().trim().equals("")) { + if (nickname.getText().trim().equals("")||nickname.getText().trim().contains("@")) { // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ Alert alert = new Alert(Alert.AlertType.WARNING); alert.setTitle("账号错误"); alert.setHeaderText("你的账号错误"); - alert.setContentText("请确保你输入的账号(昵称)不为空。"); + alert.setContentText("请确保你输入的账号(昵称)不为空,且昵称中不包含\"@\"字符"); + alert.showAndWait(); + return false; + } + //验证昵称是否为"default" + if (nickname.getText().trim().equals("default")) { + // 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/ + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setTitle("账号错误"); + alert.setHeaderText("你的账号错误"); + alert.setContentText("default为系统保留账号(昵称),请更换一个昵称。"); alert.showAndWait(); return false; } diff --git a/src/main/resources/fxml/login/RegisterOverview.fxml b/src/main/resources/fxml/login/RegisterOverview.fxml index 30dc9a6..32cd5c3 100644 --- a/src/main/resources/fxml/login/RegisterOverview.fxml +++ b/src/main/resources/fxml/login/RegisterOverview.fxml @@ -8,45 +8,45 @@ - -