OpenSSL入门-常用编码
OpenSSL入门-常用编码Base64BIO_new将参数type中各个变量赋值给BIO街头中的method成员:
123BIO* BIO_new( BIO_METHOD* type);
参数type可由BIO_f_base64返回,写的时候编码,读的时候解码:
1BIO_METHOD* BIO_f_base64();
其中BIO_METHOD结构为:
123456789101112typedef struct bio_method_st{ int type; //类型 const char* name; //名字 int (*bwrite)(BIO*,const char*,int); //二进制写回调函数 int (*bread)(BIO*,char*,int); //二进制读回调函数 int (*bputs)(BIO*,const char*); //文本写回调函数 int (*bgets)(BIO*,char*,int); //文本读回调函数 long (*ctrl)(BIO*,int,long,void*); / ...
OpenSSL入门-杂凑函数
OpenSSL入门-杂凑函数SM3实现:
12345678910111213141516171819202122232425262728293031323334353637383940#include <stdio.h>#include <string.h>#include "openssl/evp.h"int sm3_hash(const unsigned char* message, size_t len, unsigned char* hash, unsigned int* hash_len) { EVP_MD_CTX* md_ctx; const EVP_MD* md; md = EVP_sm3(); md_ctx = EVP_MD_CTX_new(); EVP_DigestInit_ex(md_ctx, md, NULL); EVP_DigestUpdate(md_ctx, message, len); EVP_DigestFinal_ex(md_ctx, hash, hash_l ...
WindowsAPI编程核心技术-内核枚举
WindowsAPI编程核心技术-内核枚举枚举用户进程12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#include <ntifs.h>#include <windef.h>extern PVOID PsGetProcessPeb(_In_ PEPROCESS Process);NTKERNELAPI NTSTATUS PsLookupProcessByProcessId(HANDLE ProcessId, PEPROCESS* Process);extern NTKERNELAPI PVOID PsGetProcessWow64Process(_In_ PEPROCESS Process);extern NTKERNELAPI UCHAR* PsGetProcessImageFileName(IN PEPROCESS Process);extern NTKER ...
Windows驱动开发入门-安全进阶
Windows驱动开发入门-安全进阶任意进程读写CR3法CR3寄存器保存页目录表PDBR地址,用CR3可对任意进程特定地址进行强制读写。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566#include <ntifs.h>#include <windef.h>#include <intrin.h>#define DIRECTORY_TABLE_BASE 0x028#pragma intrinsic(_disable)#pragma intrinsic(_enable)NTKERNELAPI NTSTATUS PsLookupProcessByProcessId(HANDLE ProcessId, PEPROCESS *Process);NTKERNELAPI CHAR* PsGetProcessImageFileName(PEPROCESS Process ...
UEFI编程入门-图形与文字显示
UEFI编程入门-图形与文字显示显示基础UEFI进行图形开发步骤为:
获取EFI_GRAPHICS_OUTPUT_PROTOCOL实例,存在多个显示设备则可获得多个实例。
查询系统支持的显示模式,特别是模式的分辨率,确定可操作的画布大小。
设置需要的显示模式。
用图形显示接口函数Blt在屏幕上绘制。
EFI_GRAPHICS_OUTPUT_PROTOCOL结构为:
1234567891011121314struct _EFI_GRAPHICS_OUTPUT_PROTOCOL { EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE QueryMode; //查询系统显示模式 EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE SetMode; //设置显示模式 EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT Blt; //图形显示接口函数 EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode; //当前 ...
机器学习入门
机器学习入门垃圾邮件过滤感知机法线性分类器如下,$w_i$为权重,$x_i$为索引:$$y=\sum_{i=1}^nw_ix_i$$然后有阈值$\theta$:$$f(y)=\begin{cases} +1&wx\geqslant\theta\\ -1&wx<\theta\end{cases}$$引入第0项$w_0=-\theta,x_0=1$,于是得到:$$y=\sum_{i=0}^nw_ix_i$$每轮学习时,更新各个权重$w_i=w_i+\Delta w_i$,其中$\Delta w_i=\lambda(y-y_i)x_i,\lambda\in[0.0,1.0]$。
123456789101112131415161718192021222324252627import warningsimport pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.model_s ...
OpenSSL入门-对称密码
OpenSSL入门-对称密码安装来这里下载二进制https://wiki.openssl.org/index.php/Binaries 并进行安装,不要选择Lite版,且注意将动态链接库放在安装目录下。
新建一个Visual Studio项目,项目属性中的VC++目录下有个包含目录,添加OpenSSL的include目录,库目录添加lib目录对应模式的子目录。链接器设置中输入的附加依赖项添加:
123libssl.liblibcrypto.libws2_32.lib
最后将bin目录下的libcrypto-3-x64.dll和libssl-3-x64.dll拷贝到工程目录和生成的可执行文件目录下。
能运行以下代码就算成功:
1234567#include <iostream>#include "openssl/evp.h"int main(void) { OpenSSL_add_all_algorithms(); std::cout << "Hello World!\n"; return 0; ...
Windows驱动开发入门-对象与注册表监控
Windows驱动开发入门-对象与注册表监控对象通知能够再试图打开或复制特定对象类型句柄时通知感兴趣的驱动,支持进程、线程和桌面对象。桌面是个内核对象,包含在Window Station内核对象中,后者是会话的一部分。桌面包含窗口、菜单和用户模式挂钩,用户模式挂钩通过SetWindowsHookEx使用。
当用户登录系统时,会创建两个桌面。Winlogon桌面由Winlogon.exe创建,这是在按下安全注意序列SAS组合键时看到的。默认桌面是正常桌面,可以看到正常窗口。用SwitchDesktop切换到另一个桌面。
注册API是ObRegisterCallbacks:
1234NTSTATUS ObRegisterCallbacks( _In_ POB_CALLBACK_REGISTRATION CallbackRegistration, _Outptr_ PVOID* RegistrationHandle //成功注册后返回值);
注册前先初始化一个OB_CALLBACK_REGISTRATION结构,提供驱动要针对什么进行注册。注销用ObUnRegisterCall ...
PyQPanda入门-量子计算入门
PyQPanda入门-量子计算入门入门数学基础设$|0\rangle=[1,0]^T,|1\rangle=[0,1]^T$为$\mathbb C^2$的一组基,则一个量子比特可表示为$|\psi\rangle=\alpha|0\rangle+\beta|1\rangle$。其中$\alpha,\beta\in\mathbb C$,称为振幅,满足归一化条件$|\alpha|^2+|\beta|^2=1$。将任意单量子比特量子态写作$\displaystyle|\psi\rangle=\cos\left(\dfrac{\theta}{2}\right)|0\rangle+e^{i\varphi}\sin\left(\dfrac{\theta}{2}\right)|1\rangle$,对应布洛赫球上一点$\psi(\cos\varphi\sin\theta,\sin\varphi\sin\theta,\cos\theta)$。布洛赫球的北极为$|0\rangle$,南极为$|1\rangle$。
对于多量子比特,例如两个量子比特可能有4个状态 ...
UEFI编程入门-环境准备
UEFI编程入门-环境准备环境准备准备需要安装Visual Studio 2019、Python 2.7+、IASL编译器、NASM编译器,并将后两者加入PATH。
其中IASL编译器下载地址https://www.intel.com/content/www/us/en/developer/topic-technology/open/acpica/download.html 。NASM编译器下载地址https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/win64/ 。
下载EDK2开发包:
12git clone https://github.com/tianocore/edk2.gitgit clone https://github.com/tianocore/edk2-libc.git
EDK2中通过Submodule方式提供了些必要的库文件和编译所需源文件,这里对他们进行初始化和更新,在edk2目录下:
1git submodule update --init #以后再更新就不用加--init了
再在edk2目录下编译BaseT ...