- 博客(53)
- 收藏
- 关注
原创 python gmssl SM4不填充加解密
使用gmssl(python版本)进行SM4加/解密时结果与国标(GMT0002)不符,或解密失败,原因是gmssl默认使用PKCS7填充,国标文档里的样例是没有填充的。
2024-05-01 10:39:41
765
原创 GMSSL学习笔记
GmSSL是由北京大学自主开发的国产商用密码开源库,实现了大部分常用的国密算法(SM2、SM3、SM4等)以及TLCP协议,使用方法类似openssl。GmSSL是一个轻量级软件,使用起来也比openssl方便一些。
2024-04-07 17:13:40
604
原创 python ctypes.pointer和ctypes.POINTER的区别
ctypes.pointer将一个已实例化的对象转换为指针,该对象的类型必须是形如ctypes内部类型,例如ctypes.c_int或ctypes.Structure。ctypes.POINTER将一个ctypes内部类型转换为对应的指针类型,不会创建该类型的对象。ctypes.POINTER通常在设置argtypes时用于生成所需类型。ctypes.pointer通常在调用时用于生成所需指针。ctypes.pointer(a)相当于C的&a。ctypes.POINTER(A)相当于C的A*。
2024-01-26 15:59:26
630
原创 git克隆失败提示RPC failed的解决方法
关键字:git, error, RPC failed, curl 18 transfer closed with outstanding read data remaininggit pull也会遇到同样的错误,解决方法相同。
2024-01-05 13:43:37
3194
原创 redis-plus-plus访问REDIS集群
初始化需要输入任意一个结点的IP和端口,如果设置了密码,还需要密码的明文并使用ConnectionOptions类。开源库:redis-plus-plus。初始化完成后可以直接进行读/写操作。接口类:RedisCluster。
2023-11-02 15:52:28
596
原创 无openssl编译libwebsockets源码(关闭SSL)
编译源码,生成不依赖openssl的libwebsockets动态库(dll)
2023-07-11 16:02:21
1666
原创 C++罕见的纯虚函数调用异常(_purecall abort)
1、析构函数的执行过程中,虚函数表会发生变化,使得虚函数的表现与一般情况不同。2、子类的析构函数返回后,所有子类实现的虚函数在虚函数表中的指针都会替换为父类的对应方法(相当于子类重写父类方法的过程反过来),然后才会执行父类的析构函数。3、如果在析构函数中直接调用纯虚函数,则会引发链接错误,这算是编译器帮我们处理了最简单的情况。但间接调用纯虚函数的复杂情况编译器无法识别。4、父类的构造函数也有类似的现象,在执行期间,虚函数表中的指针都是父类的,纯虚函数则是_purecall。
2023-07-06 15:14:02
847
原创 cmake make不打印详细信息的解决方法
cmake生成Makefile,make时不打印详细信息。Makefile中有MAKESILENT变量。
2023-03-29 14:39:19
813
原创 Tk.event_generate失效的解决方法(python tkinter)
使用event_generate发送自定义消息,无报错,但Tk窗体无法接收到消息。
2023-02-22 17:06:23
465
原创 python装饰器实例@FixWd
本文实现了一个简单的装饰器,可用于固定工作目录。不说废话直接上代码import osimport subprocessimport sysdef FixWd(f):#固定工作目录的装饰器 def ret(*args, **kwargs): strPwd = os.getcwd() r=f(*args, **kwargs) os.chdir(strPwd) return r return ret@FixWd
2022-04-28 20:13:14
718
原创 双网卡电脑的Internet连接共享
需求概述有一台双网卡的电脑A(为简便起见,假设是2个以太网口。多于2个网卡,以及有无线网卡的情况下,解决方案雷同),2个网卡分别称为eth0和eth1。eth0可以访问Internet,eth1连接(网线直连)另一台电脑B(笔者的实际案例是一个嵌入式设备。还是为了叙述简便,假设是一个普通电脑,并且电脑B除了一个以太网口外没有其它上网手段)。目标:使2台电脑都能访问Internet。操作系统:ubuntu20。windows下的操作可参考:https://jingyan.baidu.com/a
2022-01-04 20:34:20
13505
2
原创 ubuntu20无法安装python-dev的解决方法
现象使用apt安装python-dev时报错,更换软件源无法解决。首先确定python版本(大版本号,我的是3),然后使用python3-dev代替python-dev。仍然报错:(关键字:Depends,Unable to correct problems, you have held broken packages)问题原因依赖软件包的版本不匹配。也有可能是依赖软件包的依赖软件包的问题。一般不做手动排查。解决方法安装aptitudesudo apt instal
2021-12-28 11:41:35
10025
1
原创 python踩坑记录
个人踩坑记录合集解决方法:卸载python3.9,换成python3.7,重新设置环境变量,(使用pip)重新安装dnspython。效果:可正常使用dns.asyncresolver.Resolver。原因:不明...
2021-09-06 10:57:33
330
原创 CHIA源代码分析之chiavdf
概述chiavdf是chia.net开发的一个开源软件库,用于chia区块链(XCH币)。chiavdf是chia区块链的关键模块之一,功能是提供VDF接口函数,进而限制区块产生的速度。本文分析了chiavdf的软件需求和主要代码,翻译了部分英文文献,并总结了文献中的概念与代码元素(函数、变量等)的对应关系。本文使用1.0.2版本的代码,代码来源是github:https://github.com/Chia-Network/chiavdf本文首发于csdn.net,转载请注明。本文的原创
2021-08-27 22:28:20
6128
原创 以太坊DAPP开发之HDWalletProvider
HDWalletProvider类封装在truffle-hdwallet-provider软件包中,提供类似以太坊钱包的功能,可以管理密钥。本文介绍两种基本用法,均使用js编程,在truffle的配置文件中调用。1、使用助记词。2、使用密钥。代码放一起了∩ˍ∩var HDWalletProvider = require("truffle-hdwallet-provider");var g_mnemonic = "one two three four five six seven eight
2021-08-15 12:46:07
11140
1
原创 sqlite高级语法实例:子查询+UNION+JOIN实现较复杂的IF逻辑
需求概述数据库结构表Features表Features的列: FeatureType | Removable | RemoveTech | 略表Features_XP2表Features_XP2的列: FeatureType | volcano | 略Features_XP2有可能不存在,Features一定存在。数据关注FeatureType值为'FEATURE_FLOODPLAINS','FEATURE_OASIS','FEATURE_REEF','FEATURE_GEO
2021-05-12 14:11:07
538
1
原创 安装Unity Hub卡在最后一步 的解决方法
现象:没有进度条,也没有下一步按钮解决方法:在托盘区找unity图标,双击点开,点“安装”,之后选模块。unity这个设计真是挺坑的参考资料:https://tieba.baidu.com/p/6222319963?traceid=...
2020-03-04 20:51:39
17413
7
原创 [实验]关闭TCP监听套接字对已建立连接的影响
先说结果吧,结果是无影响,已建立的连接依然可以正常使用。实验环境windows10,vs2010实验过程服务器采用VC编程,客户端使用TCP调试软件。服务器工作流程1、创建监听套接字socket1,绑定端口17000。2、使用listen函数监听socket1。3、使用accept函数从socket1接受连接,得到一个新的套接字socket2。4、关闭socke...
2018-10-03 10:46:12
2456
原创 openssl生成证书及简化身份验证
概述本文将给出数个用于生成SSL证书的bat脚本,并探讨当不需要身份验证时可行的简化方案。本文面向openssl初学者,但需要一定的密码学基础知识。具体包括 对称加密、非对称加密、密钥、公钥、数字证书,以上概念只需了解即可。本文假设你已经下载安装了openssl,文章内容将不包含安装openssl。打开CMD输入openssl来验证你的openssl是否可以正常使用。开发环境...
2018-09-01 20:04:55
2102
原创 C++无法使用vector::data的原因和解决方法
vector::data是C++11新加入的方法,所以如果你的编译器说vector没有data成员,那肯定是因为编译器不支持C++11没跑儿了~解决方法嘛~就是升级编译器,或者索性换了。如果换用其它函数代替的话,可以用(&*v.begin())或者(&v[0])都行,不过需要先判断v.size()是否大于零。这里v是一个vector类型的对象。微软从VC10开始支持vect
2017-09-10 14:51:32
7209
原创 CFileDialog占用文件夹的解决方法
问题描述使用CFileDialog选择文件后发现有文件夹莫名被占用,不能删除或重命名。笔者的开发环境是Visual Studio 2005,MFC工程。出现原因CFileDialog并没有直接占用文件夹,但他会改变工作目录到所选文件所在的文件夹,导致当前进程占用该文件夹,即使销毁CFileDialog对象也不能恢复。解决方法方法一使用OFN_NOCHAN
2016-12-04 11:39:44
1724
原创 使用mfc扩展dll实现插件效果
本文要解决的问题是,使用mfc设计具有对话框界面的程序,并且支持插件(数量不限),并且每个插件都可以有自己的界面,并且主程序和插件之间要能(通过接口)双向传递数据。
2016-10-23 18:25:54
5171
2
原创 .NET使用System.Runtime.InteropServices.Marshal实现委托与函数指针互转
命名空间: System.Runtime.InteropServices函数:Marshal.GetDelegateForFunctionPointer函数:Marshal.GetFunctionPointerForDelegate
2015-10-28 10:04:50
7411
原创 std::list<>::remove_if的使用
摘要std::list::remove_if方法的作用是删除一个链表中所有满足条件的元素,其参数是一个Predicate。然而c++中的Predicate并不是很容易理解,事实上笔者至今仍未能完全掌握它。本文将介绍2种remove_if的简单用法,无需理解Predicate也能使用此功能。开发环境visual studio 2010,C++方法一:传入回调函数回调函数的原形为:
2015-10-21 11:00:57
10677
原创 valgrind报告5种内存泄露的研究
摘要:valgrind是linux下用于调试程序和查找内存泄露的常用工具。valgrind会报告5种内存泄露,"definitely lost", "indirectly lost", "possibly lost", "still reachable", 和 "suppressed"。笔者于工作闲暇之余对这5种内存泄露的出现原因及区别进行了研究,撰此文以记之。测试环境:Linu...
2015-05-05 20:15:42
23313
原创 CMutex使用时的注意事项,以及CMutex::Unlock何时会返回0
摘要:同一个CMutex对象不允许在两个线程中分别调用Lock和Unlock,否则Unlock会失败并返回0。一、问题描述笔者最近在开发过程中遇到了CMutex::Unlock返回0的情况,通过MSDN得知这表示Unlock失败。但MSDN并没有告诉我为什么会失败以及如何处理,查百度谷歌亦无果,于是决定动手探索。这是MSDN上Unlock对返回值的解释Ret
2015-03-09 15:37:46
3241
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人