Java加密技术(十)——单向认证

2023-11-07

  在 Java 加密技术(九) 中,我们使用自签名证书完成了认证。接下来,我们使用第三方CA签名机构完成证书签名。 
    这里我们使用 thawte 提供的测试用21天免费ca证书。 
    1.要在该网站上注明你的域名,这里使用 www.zlex.org 作为测试用域名( 请勿使用该域名作为你的域名地址,该域名受法律保护!请使用其他非注册域名!)。  
    2.如果域名有效,你会收到邮件要求你访问 https://www.thawte.com/cgi/server/try.exe 获得ca证书。 
    3.复述密钥库的创建。 
   
Shell代码   收藏代码
  1. keytool -genkey -validity 36000 -alias www.zlex.org -keyalg RSA -keystore d:\zlex.keystore  


在这里我使用的密码为  123456  

控制台输出: 
Console代码   收藏代码
  1. 输入keystore密码:  
  2. 再次输入新密码:  
  3. 您的名字与姓氏是什么?  
  4.   [Unknown]:  www.zlex.org  
  5. 您的组织单位名称是什么?  
  6.   [Unknown]:  zlex  
  7. 您的组织名称是什么?  
  8.   [Unknown]:  zlex  
  9. 您所在的城市或区域名称是什么?  
  10.   [Unknown]:  BJ  
  11. 您所在的州或省份名称是什么?  
  12.   [Unknown]:  BJ  
  13. 该单位的两字母国家代码是什么  
  14.   [Unknown]:  CN  
  15. CN=www.zlex.org, OU=zlex, O=zlex, L=BJ, ST=BJ, C=CN 正确吗?  
  16.   [否]:  Y  
  17.   
  18. 输入<tomcat>的主密码  
  19.         (如果和 keystore 密码相同,按回车):  
  20. 再次输入新密码:  


    4.通过如下命令,从zlex.keystore中导出CA证书申请。 
   
Shell代码   收藏代码
  1. keytool -certreq -alias www.zlex.org -file d:\zlex.csr -keystore d:\zlex.keystore -v  
你会获得zlex.csr文件,可以用记事本打开,内容如下格式:
Text代码   收藏代码
  1. -----BEGIN NEW CERTIFICATE REQUEST-----  
  2. MIIBnDCCAQUCAQAwXDELMAkGA1UEBhMCQ04xCzAJBgNVBAgTAkJKMQswCQYDVQQHEwJCSjENMAsG  
  3. A1UEChMEemxleDENMAsGA1UECxMEemxleDEVMBMGA1UEAxMMd3d3LnpsZXgub3JnMIGfMA0GCSqG  
  4. SIb3DQEBAQUAA4GNADCBiQKBgQCR6DXU9Mp+mCKO7cv9JPsj0n1Ec/GpM09qvhpgX3FNad/ZWSDc  
  5. vU77YXZSoF9hQp3w1LC+eeKgd2MlVpXTvbVwBNVd2HiQPp37ic6BUUjSaX8LHtCl7l0BIEye9qQ2  
  6. j8G0kak7e8ZA0s7nb3Ymq/K8BV7v0MQIdhIc1bifK9ZDewIDAQABoAAwDQYJKoZIhvcNAQEFBQAD  
  7. gYEAMA1r2fbZPtNx37U9TRwadCH2TZZecwKJS/hskNm6ryPKIAp9APWwAyj8WJHRBz5SpZM4zmYO  
  8. oMCI8BcnY2A4JP+R7/SwXTdH/xcg7NVghd9A2SCgqMpF7KMfc5dE3iygdiPu+UhY200Dvpjx8gmJ  
  9. 1UbH3+nqMUyCrZgURFslOUY=  
  10. -----END NEW CERTIFICATE REQUEST-----  

    5.将上述文件内容拷贝到 https://www.thawte.com/cgi/server/try.exe 中,点击next,获得回应内容,这里是p7b格式。 
内容如下:
Text代码   收藏代码
  1. -----BEGIN PKCS7-----  
  2. MIIF3AYJKoZIhvcNAQcCoIIFzTCCBckCAQExADALBgkqhkiG9w0BBwGgggWxMIID  
  3. EDCCAnmgAwIBAgIQA/mx/pKoaB+KGX2hveFU9zANBgkqhkiG9w0BAQUFADCBhzEL  
  4. MAkGA1UEBhMCWkExIjAgBgNVBAgTGUZPUiBURVNUSU5HIFBVUlBPU0VTIE9OTFkx  
  5. HTAbBgNVBAoTFFRoYXd0ZSBDZXJ0aWZpY2F0aW9uMRcwFQYDVQQLEw5URVNUIFRF  
  6. U1QgVEVTVDEcMBoGA1UEAxMTVGhhd3RlIFRlc3QgQ0EgUm9vdDAeFw0wOTA1Mjgw  
  7. MDIxMzlaFw0wOTA2MTgwMDIxMzlaMFwxCzAJBgNVBAYTAkNOMQswCQYDVQQIEwJC  
  8. SjELMAkGA1UEBxMCQkoxDTALBgNVBAoTBHpsZXgxDTALBgNVBAsTBHpsZXgxFTAT  
  9. BgNVBAMTDHd3dy56bGV4Lm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA  
  10. keg11PTKfpgiju3L/ST7I9J9RHPxqTNPar4aYF9xTWnf2Vkg3L1O+2F2UqBfYUKd  
  11. 8NSwvnnioHdjJVaV0721cATVXdh4kD6d+4nOgVFI0ml/Cx7Qpe5dASBMnvakNo/B  
  12. tJGpO3vGQNLO5292JqvyvAVe79DECHYSHNW4nyvWQ3sCAwEAAaOBpjCBozAMBgNV  
  13. HRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBABgNVHR8E  
  14. OTA3MDWgM6Axhi9odHRwOi8vY3JsLnRoYXd0ZS5jb20vVGhhd3RlUHJlbWl1bVNl  
  15. cnZlckNBLmNybDAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9v  
  16. Y3NwLnRoYXd0ZS5jb20wDQYJKoZIhvcNAQEFBQADgYEATPuxZbtJJSPmXvfrr1yz  
  17. xqM06IwTZ6UU0lZRG7I0WufMjNMKdpn8hklUhE17mxAhGSpewLVVeLR7uzBLFkuC  
  18. X7wMXxhoYdJZtNai72izU6Rd1oknao7diahvRxPK4IuQ7y2oZ511/4T4vgY6iRAj  
  19. q4q76HhPJrVRL/sduaiu+gYwggKZMIICAqADAgECAgEAMA0GCSqGSIb3DQEBBAUA  
  20. MIGHMQswCQYDVQQGEwJaQTEiMCAGA1UECBMZRk9SIFRFU1RJTkcgUFVSUE9TRVMg  
  21. T05MWTEdMBsGA1UEChMUVGhhd3RlIENlcnRpZmljYXRpb24xFzAVBgNVBAsTDlRF  
  22. U1QgVEVTVCBURVNUMRwwGgYDVQQDExNUaGF3dGUgVGVzdCBDQSBSb290MB4XDTk2  
  23. MDgwMTAwMDAwMFoXDTIwMTIzMTIxNTk1OVowgYcxCzAJBgNVBAYTAlpBMSIwIAYD  
  24. VQQIExlGT1IgVEVTVElORyBQVVJQT1NFUyBPTkxZMR0wGwYDVQQKExRUaGF3dGUg  
  25. Q2VydGlmaWNhdGlvbjEXMBUGA1UECxMOVEVTVCBURVNUIFRFU1QxHDAaBgNVBAMT  
  26. E1RoYXd0ZSBUZXN0IENBIFJvb3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB  
  27. ALV9kG+Os6x/DOhm+tKUQfzVMWGhE95sFmEtkMMTX2Zi4n6i6BvzoReJ5njzt1LF  
  28. cqu4EUk9Ji20egKKfmqRzmQFLP7+1niSdfJEUE7cKY40QoI99270PTrLjJeaMcCl  
  29. +AYl+kD+RL5BtuKKU3PurYcsCsre6aTvjMcqpTJOGeSPAgMBAAGjEzARMA8GA1Ud  
  30. EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAgozj7BkD9O8si2V0v+EZ/t7E  
  31. fz/LC8y6mD7IBUziHy5/53ymGAGLtyhXHvX+UIE6UWbHro3IqVkrmY5uC93Z2Wew  
  32. A/6edK3KFUcUikrLeewM7gmqsiASEKx2mKRKlu12jXyNS5tXrPWRDvUKtFC1uL9a  
  33. 12rFAQS2BkIk7aU+ghYxAA==  
  34. -----END PKCS7-----  
将其存储为zlex.p7b 
    6.将由CA签发的证书导入密钥库。 
   
Shell代码   收藏代码
  1. keytool -import -trustcacerts -alias www.zlex.org -file d:\zlex.p7b -keystore d:\zlex.keystore -v  


在这里我使用的密码为  123456  

    控制台输出: 
Console代码   收藏代码
  1. 输入keystore密码:  
  2.   
  3. 回复中的最高级认证:  
  4.   
  5. 所有者:CN=Thawte Test CA Root, OU=TEST TEST TEST, O=Thawte Certification, ST=FOR  
  6.  TESTING PURPOSES ONLY, C=ZA  
  7. 签发人:CN=Thawte Test CA Root, OU=TEST TEST TEST, O=Thawte Certification, ST=FOR  
  8.  TESTING PURPOSES ONLY, C=ZA  
  9. 序列号:0  
  10. 有效期: Thu Aug 01 08:00:00 CST 1996 至Fri Jan 01 05:59:59 CST 2021  
  11. 证书指纹:  
  12.          MD5:5E:E0:0E:1D:17:B7:CA:A5:7D:36:D6:02:DF:4D:26:A4  
  13.          SHA1:39:C6:9D:27:AF:DC:EB:47:D6:33:36:6A:B2:05:F1:47:A9:B4:DA:EA  
  14.          签名算法名称:MD5withRSA  
  15.          版本: 3  
  16.   
  17. 扩展:  
  18.   
  19. #1: ObjectId: 2.5.29.19 Criticality=true  
  20. BasicConstraints:[  
  21.   CA:true  
  22.   PathLen:2147483647  
  23. ]  
  24.   
  25.   
  26. ... 是不可信的。 还是要安装回复? [否]:  Y  
  27. 认证回复已安装在 keystore中  
  28. [正在存储 d:\zlex.keystore]  


    7.域名定位 
    将域名www.zlex.org定位到本机上。打开C:\Windows\System32\drivers\etc\hosts文件,将www.zlex.org绑定在本机上。在文件末尾追加127.0.0.1       www.zlex.org。现在通过地址栏访问http://www.zlex.org,或者通过ping命令,如果能够定位到本机,域名映射就搞定了。 

    8.配置server.xml 
Xml代码   收藏代码
  1. <Connector  
  2.     keystoreFile="conf/zlex.keystore"  
  3.     keystorePass="123456"   
  4.     truststoreFile="conf/zlex.keystore"      
  5.     truststorePass="123456"       
  6.     SSLEnabled="true"  
  7.     URIEncoding="UTF-8"  
  8.     clientAuth="false"            
  9.     maxThreads="150"  
  10.     port="443"  
  11.     protocol="HTTP/1.1"  
  12.     scheme="https"  
  13.     secure="true"  
  14.     sslProtocol="TLS" />  


将文件 zlex.keystore 拷贝到tomcat的 conf 目录下,重新启动tomcat。访问 https://www.zlex.org/ ,我们发现联网有些迟钝。大约5秒钟后,网页正常显示,同时有如下图所示: 
 
浏览器验证了该CA机构的有效性。 

打开证书,如下图所示: 
 

调整测试类: 
Java代码   收藏代码
  1. import static org.junit.Assert.*;  
  2.   
  3. import java.io.DataInputStream;  
  4. import java.io.InputStream;  
  5. import java.net.URL;  
  6.   
  7. import javax.net.ssl.HttpsURLConnection;  
  8.   
  9. import org.junit.Test;  
  10.   
  11. /** 
  12.  *  
  13.  * @author 梁栋 
  14.  * @version 1.0 
  15.  * @since 1.0 
  16.  */  
  17. public class CertificateCoderTest {  
  18.     private String password = "123456";  
  19.     private String alias = "www.zlex.org";  
  20.     private String certificatePath = "d:/zlex.cer";  
  21.     private String keyStorePath = "d:/zlex.keystore";  
  22.   
  23.     @Test  
  24.     public void test() throws Exception {  
  25.         System.err.println("公钥加密——私钥解密");  
  26.         String inputStr = "Ceritifcate";  
  27.         byte[] data = inputStr.getBytes();  
  28.   
  29.         byte[] encrypt = CertificateCoder.encryptByPublicKey(data,  
  30.                 certificatePath);  
  31.   
  32.         byte[] decrypt = CertificateCoder.decryptByPrivateKey(encrypt,  
  33.                 keyStorePath, alias, password);  
  34.         String outputStr = new String(decrypt);  
  35.   
  36.         System.err.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr);  
  37.   
  38.         // 验证数据一致  
  39.         assertArrayEquals(data, decrypt);  
  40.   
  41.         // 验证证书有效  
  42.         assertTrue(CertificateCoder.verifyCertificate(certificatePath));  
  43.   
  44.     }  
  45.   
  46.     @Test  
  47.     public void testSign() throws Exception {  
  48.         System.err.println("私钥加密——公钥解密");  
  49.   
  50.         String inputStr = "sign";  
  51.         byte[] data = inputStr.getBytes();  
  52.   
  53.         byte[] encodedData = CertificateCoder.encryptByPrivateKey(data,  
  54.                 keyStorePath, alias, password);  
  55.   
  56.         byte[] decodedData = CertificateCoder.decryptByPublicKey(encodedData,  
  57.                 certificatePath);  
  58.   
  59.         String outputStr = new String(decodedData);  
  60.         System.err.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr);  
  61.         assertEquals(inputStr, outputStr);  
  62.   
  63.         System.err.println("私钥签名——公钥验证签名");  
  64.         // 产生签名  
  65.         String sign = CertificateCoder.sign(encodedData, keyStorePath, alias,  
  66.                 password);  
  67.         System.err.println("签名:\r" + sign);  
  68.   
  69.         // 验证签名  
  70.         boolean status = CertificateCoder.verify(encodedData, sign,  
  71.                 certificatePath);  
  72.         System.err.println("状态:\r" + status);  
  73.         assertTrue(status);  
  74.   
  75.     }  
  76.   
  77.     @Test  
  78.     public void testHttps() throws Exception {  
  79.         URL url = new URL("https://www.zlex.org/examples/");  
  80.         HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();  
  81.   
  82.         conn.setDoInput(true);  
  83.         conn.setDoOutput(true);  
  84.   
  85.         CertificateCoder.configSSLSocketFactory(conn, password, keyStorePath,  
  86.                 keyStorePath);  
  87.   
  88.         InputStream is = conn.getInputStream();  
  89.   
  90.         int length = conn.getContentLength();  
  91.   
  92.         DataInputStream dis = new DataInputStream(is);  
  93.         byte[] data = new byte[length];  
  94.         dis.readFully(data);  
  95.   
  96.         dis.close();  
  97.         conn.disconnect();  
  98.         System.err.println(new String(data));  
  99.     }  
  100. }  


再次执行,验证通过!  

由此,我们了基于SSL协议的认证过程。测试类的testHttps方法模拟了一次浏览器的HTTPS访问。 

转载自:http://snowolf.iteye.com/blog/398198

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java加密技术(十)——单向认证 的相关文章

  • x = x.view(x.size(0), -1) 的理解

    之前对于pytorch的网络编程学习都是大致理解每一层的概念 有些语法语句没有从原理上弄清楚 就比如标题的x x view x size 0 1 这句话一般出现在model类的forward函数中 具体位置一般都是在调用分类器之前 分类器是
  • LogisticRegressionCV 参数使用以及含义 笔记

    第一次接触LogisticRegressionCV 记录一下 Logistic回归是分类算法 不能应用于回归中 传入模型的y值 不能是float类型 必须是int类型 正则化选择参数 penalty gt L1 L2 默认是L2的正则化 一
  • 【MySQL】MySQL高手是如何练成的?

    MySQL 什么是MySQL呢 怎样练成MySQL高手 在Linux安装MySQL 问题处理 Mysql 的用户管理 什么是MySQL呢 Mysql 是开源的 可以定制的 采用了 GPL 协议 可以根据业务需要修改源码来开发自己的 Mysq
  • 2023 年为您的网站提供 30 个免费的 CSS 加载动画

    我们将使用 Lottie 文件 Lottie 文件 毫不费力地为网络 应用程序 社交和设计带来最小的 免费的 随时可用的动态图形 立即创建 编辑 测试 协作和发布 Lottie 动画 脚步 1 在你的html中添加这个脚本 2 我们将提供一
  • MySQL基于复制线程实现MTS并行恢复binlog

    文章目录 一 MySQL备份恢复流程 二 并行恢复binlog原理 三 操作步骤 四 总结 一 MySQL备份恢复流程 MySQL数据恢复通常分为两个步骤 恢复全备数据 MySQL有多种备份工具 分为物理备份和逻辑备份 具体可以参看下面这篇
  • 因果推断--双重差分法(DID)的原理和实际应用(一)

    目录 一 应用场景 二 DID知识介绍 2 1 理论知识介绍 2 2 DID图形化解释 三 应用案例 3 1 构造对照组 3 2 平行趋势检验 3 3 因果效应评估 四 优缺点总结 一 应用场景 在精细化运营场景中 常常会面临如下问题 不方
  • 关闭谷歌浏览器开发者工具中的 chrome-extension 网络请求

    在谷歌浏览器的设置里 选择扩展程序 关闭插件 即可 ps 得自己一个一个的关闭试试
  • 绝不要不做点评,除非你想站队或被站队

    在项目中 对任何一方提供的任何材料 包括会议纪要 周报 月报 函件 项目技术文档及过程文档中等 绝不要直接通过 一定要提出一些意见 哪怕很微不足道的意见 原因 1 如果直接通过 意味着你同意 即你和文件提供方站在同一立场 2 如果提出一些意
  • React和Vue的区别

    文章目录 React与Vue的相同点 1 都支持服务器渲染 2 都数据驱动视图 3 都遵循组件化的思想 4 都使用虚拟DOM 5 都有状态管理 React与Vue框架的不同点 1 框架本质不同 2 数据流不同 3 监听数据变化的实现原理不同
  • Python项目命令行执行无法找到Module(ModuleNotFoundError)

    缘起 在IDE中可以执行的Python代码 直接在命令行则无法执行 错误信息提示 ModuleNotFoundError No module named xxxxx 原因分析 基于命令行执行的时候 当前项目的代码没有作为依赖包放入命令行的依
  • 电力电子转战数字IC——路科MCDF全览(持续更新)

    经过两次面试后 对MCDF做一次全面的深入总结 目前进度 硬件部分的node fifo 寄存器 formatter MCDF顶层 APB接口 TB接口 软件部分的chnl pkg fmt pkg apb pkg mcdf rgm pkg m

随机推荐

  • VMware 虚拟机图文安装和配置 AlmaLinux OS 8.6 教程

    镜像下载 域名解析 时间同步请点击 阿里云开源镜像站 一 VMWare 安装配置 1 VMware 下载地址 VMware Workstation Pro 16 x 需要登录 安装和配置步骤略 二 AlmaLinux OS 8 6 安装配置
  • 从客户端发送到服务器的请求包括哪些信息,客户端发送消息给服务器

    客户端发送消息给服务器 内容精选 换一换 VR云渲游平台提供了设备的实时监控功能 您可以通过监控大屏 查看指定设备在云上运行时的实时监控数据 当设备处于 运行中 状态时 才可以查看设备的实时监控数据 当设备与云服务器正确连接时 可在设备列表
  • CUnit详解(基于linux下的白盒单元测试)

    CUnit是一个对C语言编写的程序进行单元测试的框架 在线文档说它作为一个静态链接库被链接到用户的测试代码中 它提供了一种简洁的框架来建立测试架构 并提供丰富的断言 Assertion 来测试通用数据类型 除此之外 它还提供了 许多不同的结
  • H5考点

    HTML 5 1 行内元素 块级元素 空元素 行内元素 input img span label a b strong sub sup button textarea select 行内元素 不独占一行 上下内外边距无效 高度宽度无效 只能
  • 手把手教你突破 GPT-4.0 3小时25次的限速!

    很多人很郁闷 ChatGPT Plus账号在浏览器上使用GPT4 0模型的时候 会受到官方的限制 每3小时只能对话25次 是真的不够用 但是在手机上使用GPT4 0模型则不会有限制 既然这样 那我们是否也可以在浏览器上无限制呢 答案是可以的
  • CSDN周赛56期 - 八阿哥依旧

    之前54期被判作弊 申述无果 反被客服拉黑 水平不够 脾气够够的 让我彻底死心 从此粉转路 各种平台也不止C站一家 确实没有必要一棵树上吊shi 各位如果真心想通过竞赛提高自己的话 实在没必要来C站 整个娱人愚己 我这么说可不是恼羞成怒 看
  • 快速搜索Wox工具之Everything Client没有运行报错,解决办法!

    一直在用的一款快速搜索神器 Wox 但是在使用过程中出现一个报错 报错如下 Everything Client 没有运行 令我很烦 百度了一下 试了很多方法 还是不能发挥它的最大功效 由于我是一个好学的人 一直追踪这个问题 并寻求解决 终于
  • QT---QMainWindow初始化顺序

    C 构造 先子类以及成员 再父类以及成员 析构的顺序就是构造顺序的逆序 就是先析构父类 再析构子类 先析构本类 再析构本类的成员 QT 1 控件类 gt 控件提升类 gt QMainWindow类 2 子窗体的构造函数中初始化了父窗体的pa
  • 【log4j】

    文章目录 log4j 简介 组成 日志级别 log4j使用 占位符 log4j web 简介 Log4J 是 Apache 的一个开源项目 官网 http jakarta apache org log4j 通过在项目中使用 Log4J 我们
  • DC-UNet:重新思考UNet架构和双通道高效CNN医学图像

    摘要 经典UNet的体系架构在某些方面存在着局限性 因此本文对其结构提出了改进 1 设计高效的CNN架构来取代编码器和解码器 2 在最先进的U Net模型的基础上 应用残差模块来取代编码器和解码器之间的跳过连接来进行改进 医学图像分割是通过
  • eclipse编译慢 提高eclipse的性能

    编译慢原因有多种 其中可以通过修改eclipse ini文件设置缓存大小 并将工作空间的validation的多项验证去除 因为这些验证也为在编译时被执行 只保留几个必须的 我就只设置了xml验证 关闭checking for update
  • Spring Boot —Cache使用

    1 Spring缓存抽象 Spring从3 1开始定义了org springframework cache Cache和org springframework cache CacheManager接口来统一不同的缓存技术 并支持使用JCac
  • emcas利用矩形编辑在每行添加序列数字

    参考文章 http xahlee info emacs emacs emacs string rectangle ascii art html 通过阅读文章利用rectangle number lines函数实现 通过 查询文档发现 其绑定
  • matlab2016a贝叶斯工具箱,【Matlab】贝叶斯网络工具箱简介

    本文主要参考 以及自己对该工具箱的一点认识 通过借助该工具箱中的一个测试函数 k2demo1 m 了解整个贝叶斯网络工具箱的使用 1 给定一个贝叶斯网络结构 N 4 节点个数 即参数的个数 dag zeros N N C 1 S 2 R 3
  • 怎样使用vs2019 开始自己的第一个C++程序

    怎样使用vs2019 开始自己的第一个C 程序 一 新建项目 1 点击菜单栏 gt 文件 gt 新建 gt 项目 1 我们可以看到上方存在的语言 平台和项目类型的选项 语言这里我们就选择C 如果有需要可以选择所有语言 2 平台我们就选择wi
  • 07-----git add . 失败(warning: You ran ‘git add‘ with neither ‘-A (--all)‘ or ‘--ignore-removal‘)

    1 分析原因并解决 出错原因 远程仓库修改或者删除文件 而没有在本地更新 解决 git status 查看对应状态 git add A 或者 git add all 解决问题
  • linux 分区 dev,linux-kernel – 是/ dev / dm-1分区还是整个块设备?

    每个分区都是一个 整体 的块设备 您可以对任何分区进行子分区 然后再次对其进行子分区 然后再次 在您的示例中 dm 1可以映射到任何东西 原始设备 dmcrypt设备抽象 MD RAID支持的多路径 dm加密卷组上的逻辑卷 当设备初始化时
  • 浅浅写一下PPOCRLabel的使用及体验

    依赖包 我是基于之前建立好的paddle env环境 因此在使用过程中实际上 根据报错 需要的包只有这两个 pip install xlrd pip install PyQt5 关于报错的话 ModuleNotFoundError No m
  • Kettle案例——数据去重-不完全去重

    1 通过使用Kettle工具 创建一个转换 并添加 CSV文件输入 控件 唯一行 哈希值 控件以及Hop跳连接线 具体如图所示 2 单击 浏览 按钮 选择要进行完全去重处理的CSV文件merge csv 再单击 获取字段 按钮 Kettle
  • Java加密技术(十)——单向认证

    在 Java 加密技术 九 中 我们使用自签名证书完成了认证 接下来 我们使用第三方CA签名机构完成证书签名 这里我们使用 thawte 提供的测试用21天免费ca证书 1 要在该网站上注明你的域名 这里使用 www zlex org 作为