21.openssl编程——EVP

2023-11-15

21.1 EVP 简介
Openssl EVP (high-level cryptographic functions)提供丰富的密码学中的各种函数。
EVP主要封装如下功能函数:
a.实现了base64编解码BIO
b.实现了加解密BIO
c.实现了摘要BIO
d.实现了reliableBIO;
e.封装了摘要算法
f.封装了对称加解密算法
g.封装了非对称密钥的加密(公钥)、解密(私钥)、签名与验证以及辅助函数
h.基于口令的加密(PBE)
i.数字信封:数字信封用对方的公钥加密对称加密,数据则用此对称密钥加密。发哦是哪个给对方时,同时发送对称密钥密文和数据密文。接收方首先用自己的私钥解密密钥密文,得到对称密钥,然后用他解密数据。
j.其他辅助函数
21.2 数据结构
struct evp_pkey_st {
int type;
int save_type;
CRYPTO_REF_COUNT references;
const EVP_PKEY_ASN1_METHOD *ameth;
ENGINE *engine;
ENGINE *pmeth_engine;
union {
#ifndef OPENSSL_NO_RSA
struct rsa_st *rsa;
#endif
struct dsa_st *dsa;
#ifndef OPENSSL_NO_DSA
struct dh_st *dh;
#endif
#ifndef OPENSSL_NO_EC
struct ec_key_st *ec;
#endif
} pkey;
}
EVP_MD
struct evp_md_st {
int type;
int pkey_type;
int md_size;
unsigned long flags;
int (*init) (EVP_MD_CTX *ctx);
int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count);
int (*final) (EVP_MD_CTX *ctx, unsigned char *md);
int (*copy) (EVP_MD_CTX *to, const EVP_MD_CTX *from);
int (*cleanup) (EVP_MD_CTX *ctx);
int block_size;
int ctx_size;
int (*md_ctrl) (EVP_MD_CTX *ctx, int cmd, int p1, vpid *p2);
}
type:摘要类型,一般是摘要算算NID;
pkey_type:公钥类型,一般是签名算法NID;
md_size:摘要值大小,为字节数
flags:用于设置标记
init:摘要算法初始化函数
update:多次摘要函数
final:摘要完结函数
copy:摘要上下文结构复制函数
cleanup:清除摘要上下文函数
sign:签名函数,其中Key为非对称密钥结构地址。
erify:摘要函数,其中key为非对称结构地址。
21.2.3EVP_CIPHER
struct evp_cipher_st {
int nid;
int block_size;
int key_len;
int iv_len;
unsigned long flags;
int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc);
int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl);
int (*cleanup) (EVP_CIPHER_CTX *);
int ctx_size;
int (*set_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *);
int (*get_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *);
int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr);
void *app_data;
}
mid:对称算法nid;
block_size:对称算法每次加解密的字节数
key_len:对称算法的密钥长度字节数
iv_len:对称算法的填充长度
flags:用于标记
init:加密初始化函数,用来初始化ctx,key为对称密钥值,iv为初始化向量,enc用于指明要加密还是解密
do_cipher:对称运算函数,用于加密或解密
cleanup:清楚上下文函数
set_asn1_parameters:设置上下文参数函数
set_asn1_parameters:获取上下文参数函数
ctl:控制函数
app_data:用于存放应用数据
21.2.4EVP_CIPHER_CTX
struct evp_cipher_ctx_st {
const EVP_CIPHER *cipher;
ENGINE *engine;
int encrypt;
int buf_lenb;
unsigned char oiv[EVP_MAX_IV_LENGTH];
unsigned char iv[EVP_MAX_IV_LENGTH];
unsigned char buf[EVP_MAX_BLOCK_LENGTH];
int num;
void *app_data;
int key_len;
unsgined long flags;
void *cipher_datra;
int final_used;
int block_mask;
unsigned char final[EVP_MAX_BLOCK_LENGTH]
}
cipher:指明对称算法
engine:硬件引擎
encrypt:是加密还是解密,非0位加密,0位解密
buf和buf_len:指明还有多少数据为进行运算
oiv:原始初始化向量
iv:当前的初始化向量
final:存放最终结果,一般与final函数对应
21.3 源码结构
evp源码位于crypty/evp目录
a.全局函数
主要c_allc.c、c_alldc | c_all.c以及names.c。他们加载openssl支持所有的对称算法和摘要算法,放入到哈希表中。实现OpenSSL_add_digests | OpenSSL_add_all_cipher以及Openssl_add_all_algorithms(调用了前两个函数)函数。用户也可以单独加再只要函数(EVP_add_digetst)和对称计算函数(EVP_add_cipher)
b.BIO扩充
包括bio_b64.c | bio_enc.c | bio_md.c和bio_ok.c,各自实现了BIO_METHOD方法,分别用于base64编解码、对称加解密以及摘要。
c.摘要算法EVP封装
由digest.c实现,实现过程中调用了对应摘要算法的回调函数。各个摘要算法提供了自己的EVP_MD静态结构,对应源码为m_xxx.c
d.对称算法EVP封装
由evp_en.c实现,实现过程调用了具体对称算法函数,实现了Update操作。各种对称算法都提供了一个EVP_CIPHER静态结构,对应源码为e_xxx.c。
一般用户至少需要实现如下功能:
*构造一个新的静态的VP_CIPHER结构
*实现EVP_CIPHER结构中的init函数,该函数用于设置iv,设置加解密标记、以及根据外密钥生成自己的内部密钥
*实现do_cipher函数,该函数仅对block_size字节的数据进行对称运算
*实现cleanup函数,该函数主要用于清除内存中的密钥信息。
e.非对称算法EVP封装
主要以p_开头文件。其中,
p_enc.c封装了公钥加密;
p_dec.封装了私钥解密;
p_lib.c实现一些辅助函数
p_sign.c封装了签名函数
p_verify.c封装了验签函数
p_seal.c封装了数字信封;
p_open.c封装了解数字信封
f.基于口令的加密
包括p5_crpt2.c p5_crpt.c和evp_phe.c
21.4 摘要函数
典型的摘要函数主要有
1) EVP_md5
2) EVP_sha1
3) EVP_sha256
4) EVP_DigestInit
摘要初始化函数,需要有EVP_MD作为输入参数
5) EVP_DigsetUpdate和EVP_DigesInit_ex
摘要Update函数,用于进行多次摘要
6) EVP_DigestFinal和EVP_DIgestFinal_ex
摘要Final函数,用户得到最终结果
7) EVP_Digest
对一个数据进行摘要,他一次调用了上述三个函数
21.5 对称加解密函数
典型的加解密函数主要有:
a EVP_CIPHER_CTX_inti
初始化对称计算上下文
b.EVP_CIPHER_CTX_cleanup;
清楚对称算法上下文数据,他调用用户提供的销毁函数清楚存在的内部密钥数据
c EVP_des_ede3_ecb
返回一个EVP_CIPHER
d EVP_EncryptInit和EVP_EncryptInit_ex
加密初始化函数,本函数调用具体算法的init回调函数,将外送密钥key转换为内部密钥形式,将初始化向量iv拷贝到ctx结构中
e EVP_EncryptUpdate
获取加密结构,函数可能涉及填充,他调用了具体算法的do_cipher回调函数
f EVP_EncryptFinal和EVP_EncryptFinal_ex
解密初始化函数
g EVP_DecryptFinal和EVP_DecryptInit_ex
解密初始化函数
h EVP_DecrytUpdate
解密函数,用于多次计算,他调用了具体算法的do_cipher回调函数
i EVP_DecryptFinal和EVP_DecryptFinal_ex
获取解密结果,函数可能涉及去填充,他调用具体算法的do——cipher回调函数
j EVP_BytesToKey
计算密钥函数,他根据算法类型、摘要算法\satl以及输入数据计算出一个对称密钥和初始化响铃iv
k. PKCS5_PB3_keyivgen和PKCS5_v2_PBE_keyivgen
实现了PKCS5基于口令生成密钥 和初始化向量的算法
l. PKCS5_PBE_add
加载所有openssl实现的基于口令生成密钥的算法
m. EVP_PBE_alg_add
添加一个PBE算法
21.5 对称加解密函数
典型的加解密函数
a. EVP_CIPHER_CTX_init
初始化对称计算上下文
b. EVP_CIPHER_CTX_cleanup
清除对称算法上下文数据,他调用用户提供的销毁函数清除存中的内部密钥以及其他数据
c. EVP_des_ede3_ecb
返回一个EVP_CIPHER;
d.EVP_EncryptInit和EVP_EncryptInit_ex
加密初始化函数,本函数调用具体算法的init回调函数,将外送密钥key转换为内部密钥形式,将初始化向量iv拷贝到ctx结构中
e. EVP_EncryptUpdate
加密函数,用于对此计算,他调用了具体算法的do_cipher回调函数
f. EVP_EncryptFinal和EVP_EncryptFinal_ex
获取加密结果,函数可能涉及填充,他叼调用了具体算法的do_cipher会带哦函数
h. EVP_DecryptInit和EVP_DecryptInit_ex
解密初始化函数
i.EVP_DecryptUpdate
解密函数,用于多次计算,他调用了具体算法的do_cipher回调函数
j.EVP_DecryptFinal和EVP_DecryptFinal_ex
获取解密结果,函数可能涉及去填充,他调用了具体算法的do_cipher回调函数
k.EVP_BytesToKey
计算密钥函数、他根据算法类型、摘要算法、salt以及输入数据计算出一个对称密钥和初始化向量iv
l. PKCS5_PBE_keyivgen和PKCS5_v2_PBE_keyivgen
实现了PKCS5基于口令生成密钥和初始化向量的算法
m. PKCS5_PBE_add
加载所有openssl实现的基于口令生成密钥的算法
n. EVP_PBE_alg_add
添加一个PBE算法
21.6 非对称函数
典型的非对称函数有:
a.EVP_PKEY_encrypt
公钥加密
b.EVP_PEKY_decrypt
私钥解密
c.EVP_PKEY_assign
设置EVP_PKEY中具体的密钥结构,使他代表密钥
d.EVP_PKEY_assign_RSA/EVP_PKEY_set1_RSA
设置EVP_PKEY中的RSA密钥结构,使他代表该RSA密钥
e.EVP_PKEY_get1_RSA
获取EVP_PKEY的RSA密钥结构
f.EVP_SignFinal
签名操作,输入参数必须有私钥(EVP_PKEY)
g. EVP_VerifyFinal
验证签名,输入参数必须有公钥(EVP_PKEY)
h.int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsgined char *ek, int ekl, const unsigned char *iv, EVP_PKEY *priv)
解数字信封初始化操作,type为对称加密算法,ek密钥密文,ek1为密钥密文长度,iv为填充值,priv为用户私钥
i.EVP_OpenUpdate
做解密运算
j.EVP_OpenFinal
做解密运算,解开数字信封
k. int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsgined char **ek, int *ekl, unsgined char *iv, EVP_PKEY **pubk, int npubk)
type为对称算法,ek数组用来存放对多个公钥对称加密结果,ek1用于存放ek1数组中每个密钥密的长度,iv为填充值,pubk数组用来存放多个公钥,npubk为公钥个数,本函数用多个公钥分贝加密密钥,并做加密初始化。
l.EVP_SealUpdate
做加密运算
m.EVP_SealFinal
做加密元算,制作数字信封。
21.7 BASE64编解码函数
a.EVP_EncodeInit
BASE64编码初始化
b.EVP_EncodeUpdate
BASE64编码,可多次调用
c.EVP_EncodeFinal
BASE64编码,并获取最终结果
d.EVP_DecodeInit
BASE64解码初始化
e.EVP_DecodeUpdate
输入数据长度不能大于80字节。
f.EVP_DecodeFinal
BASE64解码,并获取最终结果
g.EVP_EncodeBlock
BASE64编码函数,本函数可单独调用
h.EVP_DecocdeBlock
BASE64解码,本函数可单独调用,对输入数据长度无要求。
21.8 对其他函数
a.EVP_add_cipher
将对称算法加入到全局变量,以供调用。
b.EVP_ add_digest
将摘要算法加入到全局变量中,以供调用
c.EVP_CIPHER_CTX_ctrl
对称算法控制函数,他调用了用户实现的ctrl回调函数
d.EVP_CIPHER_CTX_set_key_length
当对称算法密钥长度为可变长时,设置对称算法的密钥长度
e.EVP_CIPHER_CTX_set_padding
设置对称算法的填充,对称算法有时候会涉及填充。加密分组长度大于一时,用户输入数据不是加密分组的整数倍是,会涉及到填充。填充在最后一个分组来完成,openssl分组填充时,如果有n个填充,则将最后一个分组用n来填满。
f. EVP_CIPHER_get_asn1_iv
获取原始iv,存放ASN1_TYPE结构中
g.EVP_CIPHER_param_to_asn1
设置对称算法参数,参数存放ASN1_TYPE类型中,他调用用户实现的回调函数set_asn1_parameters实现的
h.EVP_CIPHER_type
获取对称算法的类型
i.EVP_CipherInit/EVP_CipherInit_ex
对称算法计算(加解密)初始化函数,_ex函数多了硬件enginge参数,EVP_EncryptInitEVP_DecryptInit函数也调用本函数
j.EVP_CipherUpdate
对称计算(加/解密)函数,他调用了EVP_EncryptUpdate和EVP_DecryptUppdate函数
k.EVP_CipherFinal/EVP_CipherFinal_ex
对称就按(加/解)函数,调用了EVP_EncryptFianl和EVP_DecryptFianl;本函数主要用来处理最后加密分组,可能会有对称计算
l.EVP_cleanup
清除加载的各种算法,包括对称算法、摘要算法以及PBE算法,并清除这些算法相关的哈希表的内容
m.EVP_get_cipherbyname
根据字符串名字来获取一种对称算法(EVP_CIPHER),本函数查询对称算法哈希表的内容
n.EVP_get_cipherbyname
根据字符串各自来获取一种对称算法(EVP_CIPHER),本函数查询对算算法哈希表
o.EVP_get_digetbyname
根据字符串获取摘要算法(EVP_MID),本函数查询摘要算法哈希表
p.EVP_get_pw_prompt
获取口令提示信息字符串
q.int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de)
PBE初始化函数。本函数用口令生成对称算法的密钥和初始化向量,并作加解密初始化操作。
r.EVP_PBE_cleanup
删除所有的PBE信息,释放全局堆栈中的信息
s.EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8)
将PKCS8_PRIV_KEY_INFO(x509.h中定义)中保存的私钥转换为EVP_PKEY结构
t.EVP_PKEY2PKC28/EVP_PKEY2PKCS8_broken
将EVP_PKEY结构中的私钥转换为PKCS8_PRIV_KEY_INFO数据结构存储
v.EVP_PKEY_bits
非对称密钥大小,为比特数
w. EVP_PKEY_cmp_parameters
比较非对称密钥的密钥参数,用于DSA和ECC密钥。
x.EVP_PKEY_copy_parameters
拷贝非对称密钥的密钥参数,用于DSA和ECC密钥
y. EVP_PKEY_free
释放非对称密钥数据结构
z. EVP_PKEY_get1_DH/EVP_PKEY_set1_DH
获取/设置EVP_get1_DSA/EVP_PKEY_set1_DSA
a1.EVP_PKEY_get1_RSA/EVP_PEKY_set1_RSA
获取/设置EVP_PKEY中结构中的RSA结构密钥
b1.EVP_PKEY_missing_parameters
检查费对称密钥参数是否齐全,用于DSA和ECC密钥
c1.EVP_PLEY_new
生成一个EVP_PKEY结构
d1.EVP_PKEY_size
获取非对称密钥的自己大小
e1.EVP_PKEY_type
获取EVP_PKEY中表示非对称密钥的类型
f1.int EVP_readpw_string(char *buf, int length, const char *prompt, int verify)
获取用户输入的口令;buf用来存放用户输入的口令,length为buf长度,prompt为提示给用户的信息,如果为空,他采用内置的提示信息,verify为0时,不要求验证用户输入口令,否则会要求用户输入两遍。返回0表示成功。
g1.EVP_set_pw_prompt
设置内置的提示信息,用于需要用户输入口令的场合。
21.9 对称加密过程
对称加密过程中
a.EVP_EncryptInit
设置buf_len为0,表明临时缓冲区buf没有数据
b. EVP_EncryptUpdate
ctx结构中的buf缓冲区用于存放上次EVP_EncryptUpdate遗留下来的为加密的指明其长度。如果buf_len为0,加密的时候先加密输入数据的整数倍,将余下的数据放入缓冲区。如果buf_len为0,加密的时候先加密输入数据的一部分(凑足一个分组的长度),然后用上面的方法加密,输出结果是加密过程的数据
c. EVP_EncryptFinal
加密ctx的buf中余下数据,如果长度不够一个分组(分组长度不为1),则填充,然后在加密,输出结果
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

21.openssl编程——EVP 的相关文章

  • 静态测试

    之前对 静态测试 一直不怎么理解 一直徘徊在为什么要进行静态测试 看了下面这几篇文章 突然觉得的柳暗花明了 目前我正在测试的项目xx让我烦心的问题终于找到出路了 http qa taobao com p 8017 http qa taoba
  • 资产收集的方法总结

    资产收集的方法总结 文章目录 资产收集的方法总结 前言 一 资产收集基本名词概念 二 相关收集方法 1 fofa 2 google搜索语法 3 logo 4 favicon ico 5 关键字 6 维基百科 7 天眼查 企查查 8 微信公众
  • 设计模式之UML类图该怎么画

    关于可维护 可复用 可扩展 灵活性好的理解 生活中 印刷术和活字印刷 当需要对某些内容修改时 印刷术只要有一丁点变化 就需要重头再来 而活字印刷只需要进行部分修改即可 可维护 只更改要更改的内容 可复用 之前的内容并非用完就无用 后面仍可使
  • Caused by: java.lang.NoClassDefFoundError: javax/tools/ToolProvider

    解决方案 在pom文件中的scala maven plugin插件下面加入一个参数 pom xml配置如下
  • python + selenium实现自动登录操作(以淘宝为例)

    selenium操作不熟练的可以查看一下这篇文章 selenium操作大全 一 登录前准备操作 定位一下相对应html位置 输入一般为input标签 登录按钮一般为button 输入账号密码那块 定位代码 driver find eleme
  • 电脑主板跳线_电脑基础进阶必学知识,详解电脑主板跳线!

    在DIY装机时新手总会有不同的问题 虽然目前网上流传着各种版本的教学文章或者视频 但是细致的小技巧讲解还是有限 不少网友在装机的时候虽然大致明白各个硬件的组合 但是在跳线的环节可以难住了不少的人 也挡住了不少小白用户前进的脚步 确实机箱内部
  • 强化学习算法 DDPG 解决 CartPole 问题,代码逐条详解

    本文内容源自百度强化学习 7 日入门课程学习整理 感谢百度 PARL 团队李科浇老师的课程讲解 使用DDPG解决连续控制版本的CartPole问题 给小车一个力 连续量 使得车上的摆杆倒立起来 文章目录 一 安装依赖 二 导入依赖 三 设置
  • 微信小程序中实现车牌输入功能

    一 成品展示与介绍 在点击输入框的时候会弹出车牌输入键盘 二 相关思路解析 首先车牌号码由31位汉字 26位字母 10位数字组成的 开头第一位由省份简称的汉字 第二位字母根据省份下的城市或地区区分 最后的五位或者六位 是有字母和数字组成的
  • 开发工具篇 程序员计算器

    BYTE数据 到16进制 10进制
  • JVM--基础--27.2--工具--VisualVM--远程连接

    JVM 基础 27 2 工具 VisualVM 远程连接 1 准备工作 准备工作是为了测试使用 1 1 代码地址 https gitee com DanShenGuiZu learnDemo tree master visualvm lea
  • c#读取html 表格,c# – 如何将文本文件读取到DataTable

    我想从txt文件中提取数据并将其放入DataTable中 txt文件中的内容采用以下格式 sometext1 sometext2 sometext3 sometext4 sometext5 sometext6 sometext7 somet
  • java获取实时天气预报数据

    数据是从 www webxml com cn上免费获取的 有需要也可以去购买服务 api可以去该网站查看 这里用的是GET方式请求 每个城市citycode 也需要从这个网站上面去下载 解析xml用到的是xwork core 2 3 15
  • 月薪快6万了!

    和一位本科师兄约饭 比我大一级 当年他的成绩很好 完全能够保送更好高校的研究生 但在大家纷纷从众去读研的时候 他选择了直接工作 去了西二旗一家大厂 具体哪家这里就不明说了 圈子很小 很容易被定位 我问了下他目前的薪资情况 他说了几个数字 现
  • 第一章矩阵及其应用

    矩阵逆运算规律 由于矩阵运算默认不满足交换律 即AB BA 但若存在一钟矩阵B 满足AB BA 就满足了交换律 单位矩阵就是特殊的一种AB BA 单位矩阵定义是这样的 lt 设A为n阶方阵 则A aE aE A aA gt 也就是说 数量阵
  • Oracle 的drop table if exists功能

    Mysql 创建表之前判断表是否存在 如果存在则删除已有表 DROP TABLE IF EXISTS SH PLACARD INFO Oracle 创建表之前判断表是否存在 如果存在则删除已有表 declare num number beg
  • 如何使用JMeter进行压力测试

    一 前期准备 首先需要在官网下载jmeter 下载完之后打开bin目录下的jmeter bat 在jmeter bat中对所要压测的接口进行压力测试 二 具体步骤 1 创建线程组 在线程组中设置线程的个数 持续时间和循环次数 如下图所示 2
  • PMI632

    1 目录 drivers power supply qcom qpnp smb5 c charger driver drivers power supply qcom smb5 lib c 依赖的SMB library arch arm64
  • CTF_Web:php伪随机数mt_rand()函数+php_mt_seed工具使用

    CTF Web php伪随机数mt rand函数漏洞 0x00 问题描述 0x01 mt rand函数 0x02 CTF例题 0x03 php mt seed工具使用 0x04 参考文章 0x00 问题描述 最近在题目练习的时候遇到了一个伪
  • Gulp入门使用(一)

    Gulp入门使用教程 Gulp的简介 为什么是Gulp 安装Gulp 创建Gulp项目 目录结构 第一个Gulp任务 Gulp执行预处理 Node中的通配符 监听Sass文件 使用Browser Sync自动刷新 Gulp的简介 gulp
  • 开学c语言测试,初学c语言之开学第一次打卡

    近日开学 忙了好多事 因此隔了好久才写了这篇博客 话少 就直接进入正题了 数数字问题 这是题目 输入一个整数 输出每个数字对应的拼音 当整数为负数时 先输出fu字 十个数字对应的拼音如下 0 ling 1 yi 2 er 3 san 4 s

随机推荐

  • 签约多方共建石嘴山智慧康养新模式

    5月13日 百度智能云与石嘴山市民政局 中国电信股份有限公司石嘴山分公司 中国银行股份有限公司石嘴山市分行 石嘴山市青鸟颐居养老服务有限公司在宁签订 石嘴山市智慧康养战略合作协议 将发挥各自优势 合力推进智慧康养产业高质量发展 提高智慧养老
  • 解决 ios 输入框属性--placeholder--不显示

    在我们写移动端项目时 会发现在IOS手机上 部分输入框的默认文字会隐藏 在此提供一套解决方法 此方法已经历过实际项目的测试 可放心的应用于实战 将此段js代码放置在项目的公共js文件中即可 if placeholder in documen
  • 海湾汉字编码表全部_汉字编码简明对照表

    汉字编码简明对照表 说明 1 下列汉字取自国标 GB 2312 80 中的分级与排列内容 包含所有的第一级汉字和第二级汉字中的常用部分 2 第一级汉字 16 55区的汉字 以拼音字母为序进行排列 同音字以笔形顺序横 竖 撇 捺 折为序 起笔
  • 生成式对抗网络(GAN)-(Generative Adversarial Networks)算法总结(从原始GAN到....目前)

    本文将按时间顺序总结gan的paper 非所有 会挑选个人认为比较重要的 并将参考其它博客 会给出链接 如有侵权 请私信删除 更新于 19 IS 可以反应图像的生成质量 越大越好 FID 则会更假注重生成的多样性 越小越好 IS score
  • mysql评审_第3章 代码检查、走查与评审

    代码检查与走查 代码检查 走查以及可用性测试是三种主要的人工测试方法 人工测试技术在查找错误方面非常有效 应该在程序开始编码之后 基于计算机的测试开始之前使用这些方法 本章主要介绍的是代码检查与走查的相似之处 而它们的不同之处将在后续章节中
  • Apache和Tomcat

    一 Apache和Tomcat的区别 Apache只是一个Web服务器 可以作为独立的web服务器来运行 不过只支持静态网页 如 asp PHP cgi jsp 等动态网页的就显得无能为力 Tomcat也可以作为独立的web服务器来运行 但
  • 什么是docker?docker有什么优缺点?

    Docker的思想来自于集装箱 集装箱解决了什么问题 在一艘大船上 可以把货物规整的摆放起来 并且各种各样的货物被集装箱标准化了 集装箱和集装箱之间不会互相影响 那么我就不需要专门运送水果的船和专门运送化学品的船了 只要这些货物在集装箱里封
  • UE4 C++ 编辑器模式下属性被修改时触发对应事件

    pragma once include CoreMinimal h include GameFramework Actor h include TestActors generated h UCLASS class TESTACTOR AP
  • 【Python】发布一个简单好用的日志记录器bestlog

    需求 日志是非常重要的一个东西 我们往往习惯于在开发一个新项目的第一行代码时 就用 logging info 代替 print 随时保持记录的好习惯 等代码上线以后也无需修改替换那些 print 直接开跑 有了完善的日志 才便于分析生产环境
  • 微信月活9亿的高效运维之路

    微信业务量增长的时候 其实我们比较关心的是效率 前期可能两三个月就涨了1倍的量 我们怎么能够保证我们的运营效率是跟得上的 后期可能主要是关心成本 我们在2014年以后增长有点放缓 所以主要的精力会在成本这个方面 分为四块来说 运营规范 云化
  • 团队项目负责人的一些感悟

    我们项目随着项目的越来越来 各种问题越来越多 比如表字段的问题 java对象的设计问题 下面是我们项目后期遇到的问题 一一罗列下 以后带团队必须注意的问题 java中 1 同一个意思的字段 在不同对象中具有不同的写法 比如说A类中金额的字段
  • Java中的String(1)

    目录 String不可变 一个例子 是字符串常量的情况下 是对象的情况下 常用的方法 String不可变 摘自JDK1 8 API文档 Strings are constant their values cannot be changed
  • springboot:异步调用@Async

    一 概述 springboot是基于spring框架的 在springboot环境下演示 Async注解的使用方式 先看下该注解的定义 复制代码 Target ElementType METHOD ElementType TYPE Rete
  • JFS及JFS2文件系统

    复杂度2 5 机密度2 5 最后更新2021 04 29 JFS和JFS2都是AIX支持的文件系统类型 JFS2是JFS的增强版 目前JFS结构已经开源 可以下载到jfs for linux的源代码 JFS开源网站 JFS JFS2都是日志
  • 单片机stm32使用ESP8266MQTT AT指令发送json字符串

    一 问题描述 基于文章 lt 单片机stm32使用rt thread软件包at device的AT指令 gt 测试发现使用MQTT AT指令发送主题信息时 直接发送字符串正常 发送json字符串时出问题 提示错误 数据格式的区别如下 s 正
  • 转:最详细的JavaScript 教程,入门级都能看懂

    目录 介绍 JavaScript特点 用法 实例1 head中的script函数 实例2 body中的script函数 实例3 外部调用JavaScript 输出 实例1 aler 弹窗输出 实例2 document write 输出 实例
  • TTL电路的拉电流、灌电流、扇出数及扇出数计算

    电流 灌电流 扇入数 扇出数 扇出数在数字电路中是非常常见的名词 下面我们先给出这些概念的定义 然后从原理出发 介绍这些名词的关系及扇出数的计算方法 灌电流 灌电流是数字电路输出端口为低电平时外部负载输入的电流 表征输入电流的能力 拉电流
  • 算力还是服务器?这不是一道选择题

    关注我们牛年牛气冲天 算力 顾名思义就是设备的计算能力 它无影无形 虽然看不见 摸不到 却真实存在 小到智能手机 PC 大到服务器 超级计算机 算力就 藏 存各种各样的硬件设备中 像沉睡的金矿 等待你去挖掘 算力 说了算 在云计算时代 一切
  • [荐]硕博经验——科研论文阅读与写作实战技巧

    又转自西电好网 http bbs xdnice com b99t378538 htm硕博经验 转来的 早知道就好了 少走很多弯路啊 该文从 举止优雅的猪 那里看见的 感觉很不错 不过我感觉到了博士才知道这些似乎有点晚了 或者是有不少人也不会
  • 21.openssl编程——EVP

    21 1 EVP 简介 Openssl EVP high level cryptographic functions 提供丰富的密码学中的各种函数 EVP主要封装如下功能函数 a 实现了base64编解码BIO b 实现了加解密BIO c