openssl3.2 - EVP_CIPHER_fetch算法名称字符串(参数2)的有效值列表
文章目录
- openssl3.2 - EVP_CIPHER_fetch算法名称字符串(参数2)的有效值列表
- 概述
- 如何找到算法名称字符串列表?
- openssl-3.2.0\providers\implementations\include\prov\names.h
- 备注
- END
openssl3.2 - EVP_CIPHER_fetch算法名称字符串(参数2)的有效值列表
概述
进行加解密时, 先要选一个算法.
如果使用EVP接口, 要调用EVP_CIPHER_fetch得到EVP算法指针.
EVP_CIPHER *cipher = NULL;
// .../* Fetch the cipher implementation */if ((cipher = EVP_CIPHER_fetch(libctx, "AES-256-GCM", propq)) == NULL)goto err;
看资料上讲, 不建议用字符串来找EVP算法指针, 因为有可能写错.
一旦写错, 就得不到有效的cipher.
如果知道写错了, 如何写对, 到底有啥标准, 不好确定.
通过有源码调试openssl.exe + SI来搜索, 找到了算法名称字符串的确切集合.
等写错了/或者不记得正确的算法名称该咋写, 就可以去openssl源码对应文件中去找.
如何找到算法名称字符串列表?
也是边调试边猜测, 毕竟openssl3.2是很庞大的第三方代码. 只要能正常用起来就行. 只关心自己关注的点, 不没事找事.
断在了 ossl_default_provider_init(), 这里会将默认算法集合赋值给上下文
int ossl_default_provider_init(const OSSL_CORE_HANDLE *handle,const OSSL_DISPATCH *in,const OSSL_DISPATCH **out,void **provctx)
{// ...*out = deflt_dispatch_table;ossl_prov_cache_exported_algorithms(deflt_ciphers, exported_ciphers); // break here// 查看变量 deflt_ciphers, 就会发现, 这就是有效算法集合.return 1;
}
deflt_ciphers 就是默认算法集合, 一共130个算法.
static const OSSL_ALGORITHM_CAPABLE deflt_ciphers[] = {ALG(PROV_NAMES_NULL, ossl_null_functions),ALG(PROV_NAMES_AES_256_ECB, ossl_aes256ecb_functions), // 1ALG(PROV_NAMES_AES_192_ECB, ossl_aes192ecb_functions),ALG(PROV_NAMES_AES_128_ECB, ossl_aes128ecb_functions),ALG(PROV_NAMES_AES_256_CBC, ossl_aes256cbc_functions),ALG(PROV_NAMES_AES_192_CBC, ossl_aes192cbc_functions),ALG(PROV_NAMES_AES_128_CBC, ossl_aes128cbc_functions),ALG(PROV_NAMES_AES_128_CBC_CTS, ossl_aes128cbc_cts_functions),ALG(PROV_NAMES_AES_192_CBC_CTS, ossl_aes192cbc_cts_functions),ALG(PROV_NAMES_AES_256_CBC_CTS, ossl_aes256cbc_cts_functions),ALG(PROV_NAMES_AES_256_OFB, ossl_aes256ofb_functions), // 10ALG(PROV_NAMES_AES_192_OFB, ossl_aes192ofb_functions),ALG(PROV_NAMES_AES_128_OFB, ossl_aes128ofb_functions),ALG(PROV_NAMES_AES_256_CFB, ossl_aes256cfb_functions),ALG(PROV_NAMES_AES_192_CFB, ossl_aes192cfb_functions),ALG(PROV_NAMES_AES_128_CFB, ossl_aes128cfb_functions),ALG(PROV_NAMES_AES_256_CFB1, ossl_aes256cfb1_functions),ALG(PROV_NAMES_AES_192_CFB1, ossl_aes192cfb1_functions),ALG(PROV_NAMES_AES_128_CFB1, ossl_aes128cfb1_functions),ALG(PROV_NAMES_AES_256_CFB8, ossl_aes256cfb8_functions),ALG(PROV_NAMES_AES_192_CFB8, ossl_aes192cfb8_functions), // 20ALG(PROV_NAMES_AES_128_CFB8, ossl_aes128cfb8_functions),ALG(PROV_NAMES_AES_256_CTR, ossl_aes256ctr_functions),ALG(PROV_NAMES_AES_192_CTR, ossl_aes192ctr_functions),ALG(PROV_NAMES_AES_128_CTR, ossl_aes128ctr_functions),ALG(PROV_NAMES_AES_256_XTS, ossl_aes256xts_functions),ALG(PROV_NAMES_AES_128_XTS, ossl_aes128xts_functions),
#ifndef OPENSSL_NO_OCBALG(PROV_NAMES_AES_256_OCB, ossl_aes256ocb_functions),ALG(PROV_NAMES_AES_192_OCB, ossl_aes192ocb_functions),ALG(PROV_NAMES_AES_128_OCB, ossl_aes128ocb_functions),
#endif /* OPENSSL_NO_OCB */
#ifndef OPENSSL_NO_SIVALG(PROV_NAMES_AES_128_SIV, ossl_aes128siv_functions), // 30ALG(PROV_NAMES_AES_192_SIV, ossl_aes192siv_functions),ALG(PROV_NAMES_AES_256_SIV, ossl_aes256siv_functions),ALG(PROV_NAMES_AES_128_GCM_SIV, ossl_aes128gcm_siv_functions),ALG(PROV_NAMES_AES_192_GCM_SIV, ossl_aes192gcm_siv_functions),ALG(PROV_NAMES_AES_256_GCM_SIV, ossl_aes256gcm_siv_functions),
#endif /* OPENSSL_NO_SIV */ALG(PROV_NAMES_AES_256_GCM, ossl_aes256gcm_functions),ALG(PROV_NAMES_AES_192_GCM, ossl_aes192gcm_functions),ALG(PROV_NAMES_AES_128_GCM, ossl_aes128gcm_functions),ALG(PROV_NAMES_AES_256_CCM, ossl_aes256ccm_functions),ALG(PROV_NAMES_AES_192_CCM, ossl_aes192ccm_functions), // 40ALG(PROV_NAMES_AES_128_CCM, ossl_aes128ccm_functions),ALG(PROV_NAMES_AES_256_WRAP, ossl_aes256wrap_functions),ALG(PROV_NAMES_AES_192_WRAP, ossl_aes192wrap_functions),ALG(PROV_NAMES_AES_128_WRAP, ossl_aes128wrap_functions),ALG(PROV_NAMES_AES_256_WRAP_PAD, ossl_aes256wrappad_functions),ALG(PROV_NAMES_AES_192_WRAP_PAD, ossl_aes192wrappad_functions),ALG(PROV_NAMES_AES_128_WRAP_PAD, ossl_aes128wrappad_functions),ALG(PROV_NAMES_AES_256_WRAP_INV, ossl_aes256wrapinv_functions),ALG(PROV_NAMES_AES_192_WRAP_INV, ossl_aes192wrapinv_functions),ALG(PROV_NAMES_AES_128_WRAP_INV, ossl_aes128wrapinv_functions), // 50ALG(PROV_NAMES_AES_256_WRAP_PAD_INV, ossl_aes256wrappadinv_functions),ALG(PROV_NAMES_AES_192_WRAP_PAD_INV, ossl_aes192wrappadinv_functions),ALG(PROV_NAMES_AES_128_WRAP_PAD_INV, ossl_aes128wrappadinv_functions),ALGC(PROV_NAMES_AES_128_CBC_HMAC_SHA1, ossl_aes128cbc_hmac_sha1_functions,ossl_cipher_capable_aes_cbc_hmac_sha1),ALGC(PROV_NAMES_AES_256_CBC_HMAC_SHA1, ossl_aes256cbc_hmac_sha1_functions,ossl_cipher_capable_aes_cbc_hmac_sha1),ALGC(PROV_NAMES_AES_128_CBC_HMAC_SHA256, ossl_aes128cbc_hmac_sha256_functions,ossl_cipher_capable_aes_cbc_hmac_sha256),ALGC(PROV_NAMES_AES_256_CBC_HMAC_SHA256, ossl_aes256cbc_hmac_sha256_functions,ossl_cipher_capable_aes_cbc_hmac_sha256),
#ifndef OPENSSL_NO_ARIAALG(PROV_NAMES_ARIA_256_GCM, ossl_aria256gcm_functions),ALG(PROV_NAMES_ARIA_192_GCM, ossl_aria192gcm_functions),ALG(PROV_NAMES_ARIA_128_GCM, ossl_aria128gcm_functions), // 60ALG(PROV_NAMES_ARIA_256_CCM, ossl_aria256ccm_functions),ALG(PROV_NAMES_ARIA_192_CCM, ossl_aria192ccm_functions),ALG(PROV_NAMES_ARIA_128_CCM, ossl_aria128ccm_functions),ALG(PROV_NAMES_ARIA_256_ECB, ossl_aria256ecb_functions),ALG(PROV_NAMES_ARIA_192_ECB, ossl_aria192ecb_functions),ALG(PROV_NAMES_ARIA_128_ECB, ossl_aria128ecb_functions),ALG(PROV_NAMES_ARIA_256_CBC, ossl_aria256cbc_functions),ALG(PROV_NAMES_ARIA_192_CBC, ossl_aria192cbc_functions),ALG(PROV_NAMES_ARIA_128_CBC, ossl_aria128cbc_functions),ALG(PROV_NAMES_ARIA_256_OFB, ossl_aria256ofb_functions), // 70ALG(PROV_NAMES_ARIA_192_OFB, ossl_aria192ofb_functions),ALG(PROV_NAMES_ARIA_128_OFB, ossl_aria128ofb_functions),ALG(PROV_NAMES_ARIA_256_CFB, ossl_aria256cfb_functions),ALG(PROV_NAMES_ARIA_192_CFB, ossl_aria192cfb_functions),ALG(PROV_NAMES_ARIA_128_CFB, ossl_aria128cfb_functions),ALG(PROV_NAMES_ARIA_256_CFB1, ossl_aria256cfb1_functions),ALG(PROV_NAMES_ARIA_192_CFB1, ossl_aria192cfb1_functions),ALG(PROV_NAMES_ARIA_128_CFB1, ossl_aria128cfb1_functions),ALG(PROV_NAMES_ARIA_256_CFB8, ossl_aria256cfb8_functions),ALG(PROV_NAMES_ARIA_192_CFB8, ossl_aria192cfb8_functions), // 80ALG(PROV_NAMES_ARIA_128_CFB8, ossl_aria128cfb8_functions),ALG(PROV_NAMES_ARIA_256_CTR, ossl_aria256ctr_functions),ALG(PROV_NAMES_ARIA_192_CTR, ossl_aria192ctr_functions),ALG(PROV_NAMES_ARIA_128_CTR, ossl_aria128ctr_functions),
#endif /* OPENSSL_NO_ARIA */
#ifndef OPENSSL_NO_CAMELLIAALG(PROV_NAMES_CAMELLIA_256_ECB, ossl_camellia256ecb_functions),ALG(PROV_NAMES_CAMELLIA_192_ECB, ossl_camellia192ecb_functions),ALG(PROV_NAMES_CAMELLIA_128_ECB, ossl_camellia128ecb_functions),ALG(PROV_NAMES_CAMELLIA_256_CBC, ossl_camellia256cbc_functions),ALG(PROV_NAMES_CAMELLIA_192_CBC, ossl_camellia192cbc_functions),ALG(PROV_NAMES_CAMELLIA_128_CBC, ossl_camellia128cbc_functions), // 90ALG(PROV_NAMES_CAMELLIA_128_CBC_CTS, ossl_camellia128cbc_cts_functions),ALG(PROV_NAMES_CAMELLIA_192_CBC_CTS, ossl_camellia192cbc_cts_functions),ALG(PROV_NAMES_CAMELLIA_256_CBC_CTS, ossl_camellia256cbc_cts_functions),ALG(PROV_NAMES_CAMELLIA_256_OFB, ossl_camellia256ofb_functions),ALG(PROV_NAMES_CAMELLIA_192_OFB, ossl_camellia192ofb_functions),ALG(PROV_NAMES_CAMELLIA_128_OFB, ossl_camellia128ofb_functions),ALG(PROV_NAMES_CAMELLIA_256_CFB, ossl_camellia256cfb_functions),ALG(PROV_NAMES_CAMELLIA_192_CFB, ossl_camellia192cfb_functions),ALG(PROV_NAMES_CAMELLIA_128_CFB, ossl_camellia128cfb_functions),ALG(PROV_NAMES_CAMELLIA_256_CFB1, ossl_camellia256cfb1_functions), // 100ALG(PROV_NAMES_CAMELLIA_192_CFB1, ossl_camellia192cfb1_functions),ALG(PROV_NAMES_CAMELLIA_128_CFB1, ossl_camellia128cfb1_functions),ALG(PROV_NAMES_CAMELLIA_256_CFB8, ossl_camellia256cfb8_functions),ALG(PROV_NAMES_CAMELLIA_192_CFB8, ossl_camellia192cfb8_functions),ALG(PROV_NAMES_CAMELLIA_128_CFB8, ossl_camellia128cfb8_functions),ALG(PROV_NAMES_CAMELLIA_256_CTR, ossl_camellia256ctr_functions),ALG(PROV_NAMES_CAMELLIA_192_CTR, ossl_camellia192ctr_functions),ALG(PROV_NAMES_CAMELLIA_128_CTR, ossl_camellia128ctr_functions),
#endif /* OPENSSL_NO_CAMELLIA */
#ifndef OPENSSL_NO_DESALG(PROV_NAMES_DES_EDE3_ECB, ossl_tdes_ede3_ecb_functions), // 110ALG(PROV_NAMES_DES_EDE3_CBC, ossl_tdes_ede3_cbc_functions),ALG(PROV_NAMES_DES_EDE3_OFB, ossl_tdes_ede3_ofb_functions),ALG(PROV_NAMES_DES_EDE3_CFB, ossl_tdes_ede3_cfb_functions),ALG(PROV_NAMES_DES_EDE3_CFB8, ossl_tdes_ede3_cfb8_functions),ALG(PROV_NAMES_DES_EDE3_CFB1, ossl_tdes_ede3_cfb1_functions),ALG(PROV_NAMES_DES3_WRAP, ossl_tdes_wrap_cbc_functions),ALG(PROV_NAMES_DES_EDE_ECB, ossl_tdes_ede2_ecb_functions),ALG(PROV_NAMES_DES_EDE_CBC, ossl_tdes_ede2_cbc_functions),ALG(PROV_NAMES_DES_EDE_OFB, ossl_tdes_ede2_ofb_functions),ALG(PROV_NAMES_DES_EDE_CFB, ossl_tdes_ede2_cfb_functions), // 120
#endif /* OPENSSL_NO_DES */
#ifndef OPENSSL_NO_SM4ALG(PROV_NAMES_SM4_GCM, ossl_sm4128gcm_functions),ALG(PROV_NAMES_SM4_CCM, ossl_sm4128ccm_functions),ALG(PROV_NAMES_SM4_ECB, ossl_sm4128ecb_functions),ALG(PROV_NAMES_SM4_CBC, ossl_sm4128cbc_functions),ALG(PROV_NAMES_SM4_CTR, ossl_sm4128ctr_functions),ALG(PROV_NAMES_SM4_OFB, ossl_sm4128ofb128_functions),ALG(PROV_NAMES_SM4_CFB, ossl_sm4128cfb128_functions),ALG(PROV_NAMES_SM4_XTS, ossl_sm4128xts_functions),
#endif /* OPENSSL_NO_SM4 */
#ifndef OPENSSL_NO_CHACHAALG(PROV_NAMES_ChaCha20, ossl_chacha20_functions),
# ifndef OPENSSL_NO_POLY1305ALG(PROV_NAMES_ChaCha20_Poly1305, ossl_chacha20_ossl_poly1305_functions), // 130
# endif /* OPENSSL_NO_POLY1305 */
#endif /* OPENSSL_NO_CHACHA */{ { NULL, NULL, NULL }, NULL }
};
PROV_NAMES_X(e.g. PROV_NAMES_AES_256_ECB) 就是算法字符串的宏定义
但是在VS2019中无法转到宏定义, 这时, 配置SI搜索, 可以确定 PROV_NAMES_AES_256_ECB定义的头文件为
D:\3rd_prj\crypt\openssl-3.2.0\providers\implementations\include\prov\names.h
openssl-3.2.0\providers\implementations\include\prov\names.h
/** Copyright 2021-2023 The OpenSSL Project Authors. All Rights Reserved.** Licensed under the Apache License 2.0 (the "License"). You may not use* this file except in compliance with the License. You can obtain a copy* in the file LICENSE in the source distribution or at* https://www.openssl.org/source/license.html*//** Macros for use as names and descriptions in our providers' OSSL_ALGORITHM.** All the strings are formatted the same way:** Our primary name[:other names][:numeric OID]** 'other names' include historical OpenSSL names, NIST names, ASN.1 OBJECT* IDENTIFIER names, and commonly known aliases.** Where it matters, our primary names follow this format:** ALGNAME[VERSION?][-SUBNAME[VERSION?]?][-SIZE?][-MODE?]** VERSION is only present if there are multiple versions of* an alg (MD2, MD4, MD5). It may be omitted if there is only* one version (if a subsequent version is released in the future,* we can always change the canonical name, and add the old name* as an alias).** SUBNAME may be present where we are combining multiple* algorithms together, e.g. MD5-SHA1.** SIZE is only present if multiple versions of an algorithm exist* with different sizes (e.g. AES-128-CBC, AES-256-CBC)** MODE is only present where applicable.*//*-* Symmetric ciphers* -----------------*/
#define PROV_NAMES_AES_256_ECB "AES-256-ECB:2.16.840.1.101.3.4.1.41"
#define PROV_NAMES_AES_192_ECB "AES-192-ECB:2.16.840.1.101.3.4.1.21"
#define PROV_NAMES_AES_128_ECB "AES-128-ECB:2.16.840.1.101.3.4.1.1"
#define PROV_NAMES_AES_256_CBC "AES-256-CBC:AES256:2.16.840.1.101.3.4.1.42"
#define PROV_NAMES_AES_192_CBC "AES-192-CBC:AES192:2.16.840.1.101.3.4.1.22"
#define PROV_NAMES_AES_128_CBC "AES-128-CBC:AES128:2.16.840.1.101.3.4.1.2"
#define PROV_NAMES_AES_256_CBC_CTS "AES-256-CBC-CTS"
#define PROV_NAMES_AES_192_CBC_CTS "AES-192-CBC-CTS"
#define PROV_NAMES_AES_128_CBC_CTS "AES-128-CBC-CTS"
#define PROV_NAMES_AES_256_OFB "AES-256-OFB:2.16.840.1.101.3.4.1.43"
#define PROV_NAMES_AES_192_OFB "AES-192-OFB:2.16.840.1.101.3.4.1.23"
#define PROV_NAMES_AES_128_OFB "AES-128-OFB:2.16.840.1.101.3.4.1.3"
#define PROV_NAMES_AES_256_CFB "AES-256-CFB:2.16.840.1.101.3.4.1.44"
#define PROV_NAMES_AES_192_CFB "AES-192-CFB:2.16.840.1.101.3.4.1.24"
#define PROV_NAMES_AES_128_CFB "AES-128-CFB:2.16.840.1.101.3.4.1.4"
#define PROV_NAMES_AES_256_CFB1 "AES-256-CFB1"
#define PROV_NAMES_AES_192_CFB1 "AES-192-CFB1"
#define PROV_NAMES_AES_128_CFB1 "AES-128-CFB1"
#define PROV_NAMES_AES_256_CFB8 "AES-256-CFB8"
#define PROV_NAMES_AES_192_CFB8 "AES-192-CFB8"
#define PROV_NAMES_AES_128_CFB8 "AES-128-CFB8"
#define PROV_NAMES_AES_256_CTR "AES-256-CTR"
#define PROV_NAMES_AES_192_CTR "AES-192-CTR"
#define PROV_NAMES_AES_128_CTR "AES-128-CTR"
#define PROV_NAMES_AES_256_XTS "AES-256-XTS:1.3.111.2.1619.0.1.2"
#define PROV_NAMES_AES_128_XTS "AES-128-XTS:1.3.111.2.1619.0.1.1"
#define PROV_NAMES_AES_256_GCM "AES-256-GCM:id-aes256-GCM:2.16.840.1.101.3.4.1.46"
#define PROV_NAMES_AES_192_GCM "AES-192-GCM:id-aes192-GCM:2.16.840.1.101.3.4.1.26"
#define PROV_NAMES_AES_128_GCM "AES-128-GCM:id-aes128-GCM:2.16.840.1.101.3.4.1.6"
#define PROV_NAMES_AES_256_CCM "AES-256-CCM:id-aes256-CCM:2.16.840.1.101.3.4.1.47"
#define PROV_NAMES_AES_192_CCM "AES-192-CCM:id-aes192-CCM:2.16.840.1.101.3.4.1.27"
#define PROV_NAMES_AES_128_CCM "AES-128-CCM:id-aes128-CCM:2.16.840.1.101.3.4.1.7"
#define PROV_NAMES_AES_256_WRAP "AES-256-WRAP:id-aes256-wrap:AES256-WRAP:2.16.840.1.101.3.4.1.45"
#define PROV_NAMES_AES_192_WRAP "AES-192-WRAP:id-aes192-wrap:AES192-WRAP:2.16.840.1.101.3.4.1.25"
#define PROV_NAMES_AES_128_WRAP "AES-128-WRAP:id-aes128-wrap:AES128-WRAP:2.16.840.1.101.3.4.1.5"
#define PROV_NAMES_AES_256_WRAP_PAD "AES-256-WRAP-PAD:id-aes256-wrap-pad:AES256-WRAP-PAD:2.16.840.1.101.3.4.1.48"
#define PROV_NAMES_AES_192_WRAP_PAD "AES-192-WRAP-PAD:id-aes192-wrap-pad:AES192-WRAP-PAD:2.16.840.1.101.3.4.1.28"
#define PROV_NAMES_AES_128_WRAP_PAD "AES-128-WRAP-PAD:id-aes128-wrap-pad:AES128-WRAP-PAD:2.16.840.1.101.3.4.1.8"
#define PROV_NAMES_AES_256_WRAP_INV "AES-256-WRAP-INV:AES256-WRAP-INV"
#define PROV_NAMES_AES_192_WRAP_INV "AES-192-WRAP-INV:AES192-WRAP-INV"
#define PROV_NAMES_AES_128_WRAP_INV "AES-128-WRAP-INV:AES128-WRAP-INV"
#define PROV_NAMES_AES_256_WRAP_PAD_INV "AES-256-WRAP-PAD-INV:AES256-WRAP-PAD-INV"
#define PROV_NAMES_AES_192_WRAP_PAD_INV "AES-192-WRAP-PAD-INV:AES192-WRAP-PAD-INV"
#define PROV_NAMES_AES_128_WRAP_PAD_INV "AES-128-WRAP-PAD-INV:AES128-WRAP-PAD-INV"
#define PROV_NAMES_AES_128_CBC_HMAC_SHA1 "AES-128-CBC-HMAC-SHA1"
#define PROV_NAMES_AES_256_CBC_HMAC_SHA1 "AES-256-CBC-HMAC-SHA1"
#define PROV_NAMES_AES_128_CBC_HMAC_SHA256 "AES-128-CBC-HMAC-SHA256"
#define PROV_NAMES_AES_256_CBC_HMAC_SHA256 "AES-256-CBC-HMAC-SHA256"
#define PROV_NAMES_DES_EDE3_ECB "DES-EDE3-ECB:DES-EDE3"
#define PROV_NAMES_DES_EDE3_CBC "DES-EDE3-CBC:DES3:1.2.840.113549.3.7"
#define PROV_NAMES_NULL "NULL"
#define PROV_NAMES_AES_256_OCB "AES-256-OCB"
#define PROV_NAMES_AES_192_OCB "AES-192-OCB"
#define PROV_NAMES_AES_128_OCB "AES-128-OCB"
#define PROV_NAMES_AES_128_SIV "AES-128-SIV"
#define PROV_NAMES_AES_192_SIV "AES-192-SIV"
#define PROV_NAMES_AES_256_SIV "AES-256-SIV"
#define PROV_NAMES_AES_128_GCM_SIV "AES-128-GCM-SIV"
#define PROV_NAMES_AES_192_GCM_SIV "AES-192-GCM-SIV"
#define PROV_NAMES_AES_256_GCM_SIV "AES-256-GCM-SIV"
#define PROV_NAMES_ARIA_256_GCM "ARIA-256-GCM:1.2.410.200046.1.1.36"
#define PROV_NAMES_ARIA_192_GCM "ARIA-192-GCM:1.2.410.200046.1.1.35"
#define PROV_NAMES_ARIA_128_GCM "ARIA-128-GCM:1.2.410.200046.1.1.34"
#define PROV_NAMES_ARIA_256_CCM "ARIA-256-CCM:1.2.410.200046.1.1.39"
#define PROV_NAMES_ARIA_192_CCM "ARIA-192-CCM:1.2.410.200046.1.1.38"
#define PROV_NAMES_ARIA_128_CCM "ARIA-128-CCM:1.2.410.200046.1.1.37"
#define PROV_NAMES_ARIA_256_ECB "ARIA-256-ECB:1.2.410.200046.1.1.11"
#define PROV_NAMES_ARIA_192_ECB "ARIA-192-ECB:1.2.410.200046.1.1.6"
#define PROV_NAMES_ARIA_128_ECB "ARIA-128-ECB:1.2.410.200046.1.1.1"
#define PROV_NAMES_ARIA_256_CBC "ARIA-256-CBC:ARIA256:1.2.410.200046.1.1.12"
#define PROV_NAMES_ARIA_192_CBC "ARIA-192-CBC:ARIA192:1.2.410.200046.1.1.7"
#define PROV_NAMES_ARIA_128_CBC "ARIA-128-CBC:ARIA128:1.2.410.200046.1.1.2"
#define PROV_NAMES_ARIA_256_OFB "ARIA-256-OFB:1.2.410.200046.1.1.14"
#define PROV_NAMES_ARIA_192_OFB "ARIA-192-OFB:1.2.410.200046.1.1.9"
#define PROV_NAMES_ARIA_128_OFB "ARIA-128-OFB:1.2.410.200046.1.1.4"
#define PROV_NAMES_ARIA_256_CFB "ARIA-256-CFB:1.2.410.200046.1.1.13"
#define PROV_NAMES_ARIA_192_CFB "ARIA-192-CFB:1.2.410.200046.1.1.8"
#define PROV_NAMES_ARIA_128_CFB "ARIA-128-CFB:1.2.410.200046.1.1.3"
#define PROV_NAMES_ARIA_256_CFB1 "ARIA-256-CFB1"
#define PROV_NAMES_ARIA_192_CFB1 "ARIA-192-CFB1"
#define PROV_NAMES_ARIA_128_CFB1 "ARIA-128-CFB1"
#define PROV_NAMES_ARIA_256_CFB8 "ARIA-256-CFB8"
#define PROV_NAMES_ARIA_192_CFB8 "ARIA-192-CFB8"
#define PROV_NAMES_ARIA_128_CFB8 "ARIA-128-CFB8"
#define PROV_NAMES_ARIA_256_CTR "ARIA-256-CTR:1.2.410.200046.1.1.15"
#define PROV_NAMES_ARIA_192_CTR "ARIA-192-CTR:1.2.410.200046.1.1.10"
#define PROV_NAMES_ARIA_128_CTR "ARIA-128-CTR:1.2.410.200046.1.1.5"
#define PROV_NAMES_CAMELLIA_256_ECB "CAMELLIA-256-ECB:0.3.4401.5.3.1.9.41"
#define PROV_NAMES_CAMELLIA_192_ECB "CAMELLIA-192-ECB:0.3.4401.5.3.1.9.21"
#define PROV_NAMES_CAMELLIA_128_ECB "CAMELLIA-128-ECB:0.3.4401.5.3.1.9.1"
#define PROV_NAMES_CAMELLIA_256_CBC "CAMELLIA-256-CBC:CAMELLIA256:1.2.392.200011.61.1.1.1.4"
#define PROV_NAMES_CAMELLIA_192_CBC "CAMELLIA-192-CBC:CAMELLIA192:1.2.392.200011.61.1.1.1.3"
#define PROV_NAMES_CAMELLIA_128_CBC "CAMELLIA-128-CBC:CAMELLIA128:1.2.392.200011.61.1.1.1.2"
#define PROV_NAMES_CAMELLIA_256_CBC_CTS "CAMELLIA-256-CBC-CTS"
#define PROV_NAMES_CAMELLIA_192_CBC_CTS "CAMELLIA-192-CBC-CTS"
#define PROV_NAMES_CAMELLIA_128_CBC_CTS "CAMELLIA-128-CBC-CTS"
#define PROV_NAMES_CAMELLIA_256_OFB "CAMELLIA-256-OFB:0.3.4401.5.3.1.9.43"
#define PROV_NAMES_CAMELLIA_192_OFB "CAMELLIA-192-OFB:0.3.4401.5.3.1.9.23"
#define PROV_NAMES_CAMELLIA_128_OFB "CAMELLIA-128-OFB:0.3.4401.5.3.1.9.3"
#define PROV_NAMES_CAMELLIA_256_CFB "CAMELLIA-256-CFB:0.3.4401.5.3.1.9.44"
#define PROV_NAMES_CAMELLIA_192_CFB "CAMELLIA-192-CFB:0.3.4401.5.3.1.9.24"
#define PROV_NAMES_CAMELLIA_128_CFB "CAMELLIA-128-CFB:0.3.4401.5.3.1.9.4"
#define PROV_NAMES_CAMELLIA_256_CFB1 "CAMELLIA-256-CFB1"
#define PROV_NAMES_CAMELLIA_192_CFB1 "CAMELLIA-192-CFB1"
#define PROV_NAMES_CAMELLIA_128_CFB1 "CAMELLIA-128-CFB1"
#define PROV_NAMES_CAMELLIA_256_CFB8 "CAMELLIA-256-CFB8"
#define PROV_NAMES_CAMELLIA_192_CFB8 "CAMELLIA-192-CFB8"
#define PROV_NAMES_CAMELLIA_128_CFB8 "CAMELLIA-128-CFB8"
#define PROV_NAMES_CAMELLIA_256_CTR "CAMELLIA-256-CTR:0.3.4401.5.3.1.9.49"
#define PROV_NAMES_CAMELLIA_192_CTR "CAMELLIA-192-CTR:0.3.4401.5.3.1.9.29"
#define PROV_NAMES_CAMELLIA_128_CTR "CAMELLIA-128-CTR:0.3.4401.5.3.1.9.9"
#define PROV_NAMES_DES_EDE3_OFB "DES-EDE3-OFB"
#define PROV_NAMES_DES_EDE3_CFB "DES-EDE3-CFB"
#define PROV_NAMES_DES_EDE3_CFB8 "DES-EDE3-CFB8"
#define PROV_NAMES_DES_EDE3_CFB1 "DES-EDE3-CFB1"
#define PROV_NAMES_DES3_WRAP "DES3-WRAP:id-smime-alg-CMS3DESwrap:1.2.840.113549.1.9.16.3.6"
#define PROV_NAMES_DES_EDE_ECB "DES-EDE-ECB:DES-EDE:1.3.14.3.2.17"
#define PROV_NAMES_DES_EDE_CBC "DES-EDE-CBC"
#define PROV_NAMES_DES_EDE_OFB "DES-EDE-OFB"
#define PROV_NAMES_DES_EDE_CFB "DES-EDE-CFB"
#define PROV_NAMES_SM4_ECB "SM4-ECB:1.2.156.10197.1.104.1"
#define PROV_NAMES_SM4_CBC "SM4-CBC:SM4:1.2.156.10197.1.104.2"
#define PROV_NAMES_SM4_CTR "SM4-CTR:1.2.156.10197.1.104.7"
#define PROV_NAMES_SM4_OFB "SM4-OFB:SM4-OFB128:1.2.156.10197.1.104.3"
#define PROV_NAMES_SM4_CFB "SM4-CFB:SM4-CFB128:1.2.156.10197.1.104.4"
#define PROV_NAMES_SM4_GCM "SM4-GCM:1.2.156.10197.1.104.8"
#define PROV_NAMES_SM4_CCM "SM4-CCM:1.2.156.10197.1.104.9"
#define PROV_NAMES_SM4_XTS "SM4-XTS:1.2.156.10197.1.104.10"
#define PROV_NAMES_ChaCha20 "ChaCha20"
#define PROV_NAMES_ChaCha20_Poly1305 "ChaCha20-Poly1305"
#define PROV_NAMES_CAST5_ECB "CAST5-ECB"
#define PROV_NAMES_CAST5_CBC "CAST5-CBC:CAST-CBC:CAST:1.2.840.113533.7.66.10"
#define PROV_NAMES_CAST5_OFB "CAST5-OFB"
#define PROV_NAMES_CAST5_CFB "CAST5-CFB"
#define PROV_NAMES_BF_ECB "BF-ECB"
#define PROV_NAMES_BF_CBC "BF-CBC:BF:BLOWFISH:1.3.6.1.4.1.3029.1.2"
#define PROV_NAMES_BF_OFB "BF-OFB"
#define PROV_NAMES_BF_CFB "BF-CFB"
#define PROV_NAMES_IDEA_ECB "IDEA-ECB"
#define PROV_NAMES_IDEA_CBC "IDEA-CBC:IDEA:1.3.6.1.4.1.188.7.1.1.2"
#define PROV_NAMES_IDEA_OFB "IDEA-OFB:IDEA-OFB64"
#define PROV_NAMES_IDEA_CFB "IDEA-CFB:IDEA-CFB64"
#define PROV_NAMES_SEED_ECB "SEED-ECB:1.2.410.200004.1.3"
#define PROV_NAMES_SEED_CBC "SEED-CBC:SEED:1.2.410.200004.1.4"
#define PROV_NAMES_SEED_OFB "SEED-OFB:SEED-OFB128:1.2.410.200004.1.6"
#define PROV_NAMES_SEED_CFB "SEED-CFB:SEED-CFB128:1.2.410.200004.1.5"
#define PROV_NAMES_RC2_ECB "RC2-ECB"
#define PROV_NAMES_RC2_CBC "RC2-CBC:RC2:RC2-128:1.2.840.113549.3.2"
#define PROV_NAMES_RC2_40_CBC "RC2-40-CBC:RC2-40"
#define PROV_NAMES_RC2_64_CBC "RC2-64-CBC:RC2-64"
#define PROV_NAMES_RC2_CFB "RC2-CFB"
#define PROV_NAMES_RC2_OFB "RC2-OFB"
#define PROV_NAMES_RC4 "RC4:1.2.840.113549.3.4"
#define PROV_NAMES_RC4_40 "RC4-40"
#define PROV_NAMES_RC4_HMAC_MD5 "RC4-HMAC-MD5"
#define PROV_NAMES_RC5_ECB "RC5-ECB"
#define PROV_NAMES_RC5_CBC "RC5-CBC:RC5:1.2.840.113549.3.8"
#define PROV_NAMES_RC5_OFB "RC5-OFB"
#define PROV_NAMES_RC5_CFB "RC5-CFB"
#define PROV_NAMES_DESX_CBC "DESX-CBC:DESX"
#define PROV_NAMES_DES_ECB "DES-ECB:1.3.14.3.2.6"
#define PROV_NAMES_DES_CBC "DES-CBC:DES:1.3.14.3.2.7"
#define PROV_NAMES_DES_OFB "DES-OFB:1.3.14.3.2.8"
#define PROV_NAMES_DES_CFB "DES-CFB:1.3.14.3.2.9"
#define PROV_NAMES_DES_CFB1 "DES-CFB1"
#define PROV_NAMES_DES_CFB8 "DES-CFB8"/*-* Digests* -------*/
#define PROV_NAMES_SHA1 "SHA1:SHA-1:SSL3-SHA1:1.3.14.3.2.26"
#define PROV_NAMES_SHA2_224 "SHA2-224:SHA-224:SHA224:2.16.840.1.101.3.4.2.4"
#define PROV_NAMES_SHA2_256 "SHA2-256:SHA-256:SHA256:2.16.840.1.101.3.4.2.1"
#define PROV_NAMES_SHA2_256_192 "SHA2-256/192:SHA-256/192:SHA256-192"
#define PROV_NAMES_SHA2_384 "SHA2-384:SHA-384:SHA384:2.16.840.1.101.3.4.2.2"
#define PROV_NAMES_SHA2_512 "SHA2-512:SHA-512:SHA512:2.16.840.1.101.3.4.2.3"
#define PROV_NAMES_SHA2_512_224 "SHA2-512/224:SHA-512/224:SHA512-224:2.16.840.1.101.3.4.2.5"
#define PROV_NAMES_SHA2_512_256 "SHA2-512/256:SHA-512/256:SHA512-256:2.16.840.1.101.3.4.2.6"/* We agree with NIST here, so one name only */
#define PROV_NAMES_SHA3_224 "SHA3-224:2.16.840.1.101.3.4.2.7"
#define PROV_NAMES_SHA3_256 "SHA3-256:2.16.840.1.101.3.4.2.8"
#define PROV_NAMES_SHA3_384 "SHA3-384:2.16.840.1.101.3.4.2.9"
#define PROV_NAMES_SHA3_512 "SHA3-512:2.16.840.1.101.3.4.2.10"#define PROV_NAMES_KECCAK_224 "KECCAK-224"
#define PROV_NAMES_KECCAK_256 "KECCAK-256"
#define PROV_NAMES_KECCAK_384 "KECCAK-384"
#define PROV_NAMES_KECCAK_512 "KECCAK-512"#define PROV_NAMES_SHAKE_128 "SHAKE-128:SHAKE128:2.16.840.1.101.3.4.2.11"
#define PROV_NAMES_SHAKE_256 "SHAKE-256:SHAKE256:2.16.840.1.101.3.4.2.12"/** KECCAK-KMAC-128 and KECCAK-KMAC-256 as hashes are mostly useful for * KMAC128 and KMAC256.*/
#define PROV_NAMES_KECCAK_KMAC_128 "KECCAK-KMAC-128:KECCAK-KMAC128"
#define PROV_NAMES_KECCAK_KMAC_256 "KECCAK-KMAC-256:KECCAK-KMAC256"
/** https://blake2.net/ doesn't specify size variants, but mentions that* Bouncy Castle uses the names BLAKE2b-160, BLAKE2b-256, BLAKE2b-384, and* BLAKE2b-512* If we assume that "2b" and "2s" are versions, that pattern fits with ours.* We also add our historical names.*/
#define PROV_NAMES_BLAKE2S_256 "BLAKE2S-256:BLAKE2s256:1.3.6.1.4.1.1722.12.2.2.8"
#define PROV_NAMES_BLAKE2B_512 "BLAKE2B-512:BLAKE2b512:1.3.6.1.4.1.1722.12.2.1.16"
#define PROV_NAMES_SM3 "SM3:1.2.156.10197.1.401"
#define PROV_NAMES_MD5 "MD5:SSL3-MD5:1.2.840.113549.2.5"
#define PROV_NAMES_MD5_SHA1 "MD5-SHA1"
#define PROV_NAMES_MD2 "MD2:1.2.840.113549.2.2"
#define PROV_NAMES_MD4 "MD4:1.2.840.113549.2.4"
#define PROV_NAMES_MDC2 "MDC2:2.5.8.3.101"
#define PROV_NAMES_WHIRLPOOL "WHIRLPOOL:1.0.10118.3.0.55"
#define PROV_NAMES_RIPEMD_160 "RIPEMD-160:RIPEMD160:RIPEMD:RMD160:1.3.36.3.2.1"/*-* KDFs / PRFs* -----------*/
#define PROV_NAMES_HKDF "HKDF"
#define PROV_DESCS_HKDF_SIGN "OpenSSL HKDF via EVP_PKEY implementation"
#define PROV_NAMES_TLS1_3_KDF "TLS13-KDF"
#define PROV_NAMES_SSKDF "SSKDF"
#define PROV_NAMES_PBKDF1 "PBKDF1"
#define PROV_NAMES_PBKDF2 "PBKDF2:1.2.840.113549.1.5.12"
#define PROV_NAMES_PVKKDF "PVKKDF"
#define PROV_NAMES_SSHKDF "SSHKDF"
#define PROV_NAMES_X963KDF "X963KDF:X942KDF-CONCAT"
#define PROV_NAMES_X942KDF_ASN1 "X942KDF-ASN1:X942KDF"
#define PROV_NAMES_TLS1_PRF "TLS1-PRF"
#define PROV_DESCS_TLS1_PRF_SIGN "OpenSSL TLS1_PRF via EVP_PKEY implementation"
#define PROV_NAMES_KBKDF "KBKDF"
#define PROV_NAMES_PKCS12KDF "PKCS12KDF"
#define PROV_NAMES_SCRYPT "SCRYPT:id-scrypt:1.3.6.1.4.1.11591.4.11"
#define PROV_DESCS_SCRYPT_SIGN "OpenSSL SCRYPT via EVP_PKEY implementation"
#define PROV_NAMES_KRB5KDF "KRB5KDF"
#define PROV_NAMES_HMAC_DRBG_KDF "HMAC-DRBG-KDF"
#define PROV_NAMES_ARGON2I "ARGON2I"
#define PROV_NAMES_ARGON2D "ARGON2D"
#define PROV_NAMES_ARGON2ID "ARGON2ID"/*-* MACs* ----*/
#define PROV_NAMES_HMAC "HMAC"
#define PROV_DESCS_HMAC_SIGN "OpenSSL HMAC via EVP_PKEY implementation"
#define PROV_NAMES_CMAC "CMAC"
#define PROV_DESCS_CMAC_SIGN "OpenSSL CMAC via EVP_PKEY implementation"
#define PROV_NAMES_SIPHASH "SIPHASH"
#define PROV_DESCS_SIPHASH_SIGN "OpenSSL SIPHASH via EVP_PKEY implementation"
#define PROV_NAMES_POLY1305 "POLY1305"
#define PROV_DESCS_POLY1305_SIGN "OpenSSL POLY1305 via EVP_PKEY implementation"
#define PROV_NAMES_GMAC "GMAC:1.0.9797.3.4"
#define PROV_NAMES_KMAC_128 "KMAC-128:KMAC128:2.16.840.1.101.3.4.2.19"
#define PROV_NAMES_KMAC_256 "KMAC-256:KMAC256:2.16.840.1.101.3.4.2.20"
#define PROV_NAMES_BLAKE2BMAC "BLAKE2BMAC:1.3.6.1.4.1.1722.12.2.1"
#define PROV_NAMES_BLAKE2SMAC "BLAKE2SMAC:1.3.6.1.4.1.1722.12.2.2"/*-* RANDs* -----*/
#define PROV_NAMES_CTR_DRBG "CTR-DRBG"
#define PROV_NAMES_HASH_DRBG "HASH-DRBG"
#define PROV_NAMES_HMAC_DRBG "HMAC-DRBG"
#define PROV_NAMES_TEST_RAND "TEST-RAND"
#define PROV_NAMES_SEED_SRC "SEED-SRC"/*-* Asymmetric algos* ----------------*/
#define PROV_NAMES_EC "EC:id-ecPublicKey:1.2.840.10045.2.1"
#define PROV_DESCS_EC "OpenSSL EC implementation"
#define PROV_NAMES_ECDH "ECDH"
#define PROV_DESCS_ECDH "OpenSSL ECDH implementation"
#define PROV_NAMES_ECDSA "ECDSA"
#define PROV_DESCS_ECDSA "OpenSSL ECDSA implementation"
#define PROV_NAMES_X25519 "X25519:1.3.101.110"
#define PROV_DESCS_X25519 "OpenSSL X25519 implementation"
#define PROV_NAMES_X448 "X448:1.3.101.111"
#define PROV_DESCS_X448 "OpenSSL X448 implementation"
#define PROV_NAMES_ED25519 "ED25519:1.3.101.112"
#define PROV_DESCS_ED25519 "OpenSSL ED25519 implementation"
#define PROV_NAMES_ED448 "ED448:1.3.101.113"
#define PROV_DESCS_ED448 "OpenSSL ED448 implementation"
#define PROV_NAMES_DH "DH:dhKeyAgreement:1.2.840.113549.1.3.1"
#define PROV_DESCS_DH "OpenSSL PKCS#3 DH implementation"
#define PROV_NAMES_DHX "DHX:X9.42 DH:dhpublicnumber:1.2.840.10046.2.1"
#define PROV_DESCS_DHX "OpenSSL X9.42 DH implementation"
#define PROV_NAMES_DSA "DSA:dsaEncryption:1.2.840.10040.4.1"
#define PROV_DESCS_DSA "OpenSSL DSA implementation"
#define PROV_NAMES_RSA "RSA:rsaEncryption:1.2.840.113549.1.1.1"
#define PROV_DESCS_RSA "OpenSSL RSA implementation"
#define PROV_NAMES_RSA_PSS "RSA-PSS:RSASSA-PSS:1.2.840.113549.1.1.10"
#define PROV_DESCS_RSA_PSS "OpenSSL RSA-PSS implementation"
#define PROV_NAMES_SM2 "SM2:1.2.156.10197.1.301"
#define PROV_DESCS_SM2 "OpenSSL SM2 implementation"
name.h中的 PROV_NAMES_X的宏就是算法名称字符串.
有的算法名称有别名, 在宏定义的字符串中用’:'分开, 如下:
#define PROV_NAMES_AES_256_GCM "AES-256-GCM:id-aes256-GCM:2.16.840.1.101.3.4.1.46"
我们在程序中写的算法字符串可以使用由’:'分隔开的别名之一就行.
e.g. 为了使用EVP_CIPHER_fetch参数2, 可以写的参数2名称如下3种都行:
正好我在实验的aesgcm.c, 使用的就是"AES-256-GCM", 来试试别名行不行?
// 这个实验是在解密函数中实验的, 以下3种写法都可以正确解密密文为明文, 说明我猜测的正确的// #define PROV_NAMES_AES_256_GCM "AES-256-GCM:id-aes256-GCM:2.16.840.1.101.3.4.1.46"// if ((cipher = EVP_CIPHER_fetch(libctx, "AES-256-GCM", propq)) == NULL)// if ((cipher = EVP_CIPHER_fetch(libctx, "id-aes256-GCM", propq)) == NULL)if ((cipher = EVP_CIPHER_fetch(libctx, "2.16.840.1.101.3.4.1.46", propq)) == NULL){goto err;}
备注
有了这个知识点后, 就不怕EVP_CIPHER_fetch()参数2写错了, 或者想不起来怎么写:P
也就不用自己避开EVP_CIPHER_fetch(), 来指定算法指针那么麻烦.
如果换个算法, 就换个算法名称字符串宏就搞定.
如果自己将算法名称字符串写错了, 就去name.h中找一下, 确认一下即可.
END
相关文章:
openssl3.2 - EVP_CIPHER_fetch算法名称字符串(参数2)的有效值列表
文章目录 openssl3.2 - EVP_CIPHER_fetch算法名称字符串(参数2)的有效值列表概述如何找到算法名称字符串列表?openssl-3.2.0\providers\implementations\include\prov\names.h备注END openssl3.2 - EVP_CIPHER_fetch算法名称字符串(参数2)的有效值列表 概述 进行加解密时, 先…...
vue3中的hook公共函数封装及运用
vue3 中的 hooks 就是函数的一种写法,就是将文件的一些单独功能的js代码进行抽离出来,放到单独的js文件中,或者说是一些可以复用的公共方法/功能 使用Vue3的组合API封装的可复用的功能函数自定义hook的作用类似于vue2中的mixin技术自定义Hook…...
广州市工信局、天河区商务金融局及广州专精特新促进会走访思迈特
2024年1月11日下午,广州市工信局、天河区商务金融局及广州专精特新促进会相关负责人莅临广州思迈特软件总部调研指导,思迈特软件总裁兼COO姚诗成代表公司热情接待,并陪同调研。 调研组实地参观了思迈特软件,深入了解了思迈特发展历…...
vi编辑器显示行号和不显示行号切换命令
文章目录 1.临时生效只需要在vi编辑器里面输入1.1.显示行号1.2.不显示行号 2.永久生效 1.临时生效只需要在vi编辑器里面输入 1.1.显示行号 set number 或者 set nu如下图 1.2.不显示行号 set nonumber 或者 set nonu2.永久生效 首先打开配置文件/etc/vim/vimrc,向文件中添…...
使用 LLVM clang C/C++ 编译器编译 boost 基础框架类库
1、下载 boost 1.84 库的源代码放到待编译目录 2、解压并接入 boost 1.84 库源码的根目录 搜索默认的 clang 版本,WSL 2.0/Ubuntu 18.04 LTS 为 clang 6.x 执行命令: ./bootstrap.sh --with-toolsetclang ./b2 toolsetclang 另外一个方法比较麻烦需要…...
推荐一款.NET开发的物联网开源项目
物联网(IoT)是一个正在快速发展的技术领域,它涉及到各种设备、物体和系统的互联。所以各种物联网平台和物联网网关项目层出不穷,在物联网(IoT)领域,.NET平台扮演着重要的角色。作为一款广泛使用…...
正则表达式 (用于灵活匹配文本的表达式)
目录 . * . 用于匹配任意单个字符,除了换行符。 例如使用正则表达式 a.b, 它可以匹配aab、acb、a#b * 用于匹配前一个字符零次或多次。 例如,使用正则表达式 ab*c,它可以匹配 "ac"、"abc"、"abbc"&#…...
基于4G数采终端的供热管网在线监测方案
我国大部地区全面进入到冬季,北方各地已开启冬季供暖,以保障居民生活所需。由于城市化的发展,城市内各供热区域愈发分散、供热管道漫长、供热环境复杂,对于供热管网及换热站点的监测和维护提出了诸多挑战。 方案介绍 针对提高供热…...
OPC UA 开源库编译方法及通过OPC UA连接西门S7-1200 PLC通信并进行数据交换[一]
前言 在现代工业自动化领域,OPC UA(开放性生产控制和统一架构)是一种广泛应用的通信协议。本文将以通俗易懂的方式解释OPC UA的含义和作用,帮助读者更好地理解这一概念。 一、OPC UA的定义 OPC UA全称为“开放性生产控制和统一…...
2019年认证杯SPSSPRO杯数学建模B题(第二阶段)外星语词典全过程文档及程序
2019年认证杯SPSSPRO杯数学建模 基于统计和迭代匹配的未知语言文本片段提取模型 B题 外星语词典 原题再现: 我们发现了一种未知的语言,现只知道其文字是以 20 个字母构成的。我们已经获取了许多段由该语言写成的文本,但每段文本只是由字母…...
NFS的共享与挂载
一、NFS网络文件服务 1.1简介 NFS(Network File System 网络文件服务) 文件系统(软件)文件的权限 NFS 是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。 通过使用 NFS 协议,客户机可以像访…...
函数式编程的Java编码实践:利用惰性写出高性能且抽象的代码
转载链接 本文会以惰性加载为例一步步介绍函数式编程中各种概念,所以读者不需要任何函数式编程的基础,只需要对 Java 8 有些许了解即可。 一 抽象一定会导致代码性能降低? 程序员的梦想就是能写出 “高内聚,低耦合”的代码&…...
2024年甘肃省职业院校技能大赛信息安全管理与评估 样题二 模块二
竞赛需要完成三个阶段的任务,分别完成三个模块,总分共计 1000分。三个模块内容和分值分别是: 1.第一阶段:模块一 网络平台搭建与设备安全防护(180 分钟,300 分)。 2.第二阶段:模块二…...
mysql 一对多 合并多个通过 逗号拼接展示
mysql 一对多 合并多个通过 逗号拼接展示 以上内容由chatgpt中文网 动态生成 SELECTuser_id,project_id,GROUP_CONCAT(project_specs_id) AS merged_specs_ids FROMzt_medication_specs_total WHEREspecs_num_total < 5 GROUP BYuser_id, project_id;laravel model 对应写…...
Java零基础教学文档第五篇:jQuery
今日新篇章 【jQuery】 【主要内容】 jQuery简介 jQuery安装 jQuery语法 jQuery选择器 jQuery事件处理 jQueryDOM操作 jQuery元素遍历 jQuery过滤 jQuery其它方法 【学习目标】 1.jQuery简介 1.1 jQuery简介 jQuery 库可以通过一行简单的标记被添加到网页中。 1.…...
samba
samba 文章目录 samba1. samba简介2. samba访问3. 示例 1. samba简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。 在此之前我们已经了解了NFS,NFS与samba一样,也是在网络中实现文件共享的一种实现&a…...
「云渲染科普」3dmax vray动画渲染参数如何设置
动画渲染一直都是占用时间最多的地方,动画帧数通常 1 秒在 25 帧或者以上,电脑通常需要对每一帧的画面分批渲染,通常本地电脑由于配置上的限制,往往无法在短时间内快速的完成渲染任务。这时“云渲染”则成为了动画渲染的主要方案&…...
【GCC】6 接收端实现:周期构造RTCP反馈包
基于m98代码。GCC涉及的代码,可能位于:webrtc/modules/remote_bitrate_estimator webrtc/modules/congestion_controller webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc webrtc 之 RemoteEstimatorProxy 对 remote_bitrate_estimator 的 RemoteEstimato…...
【RTOS】快速体验FreeRTOS所有常用API(6)事件组
目录 六、事件组6.1 基本概念6.2 创建6.3 设置事件6.4 等待事件6.5 实例 六、事件组 该部分在上份代码基础上修改得来,代码下载链接: https://wwzr.lanzout.com/iihn01la39je 密码:dtr0 该代码尽量做到最简,不添加多余的、不规范的代码。 内容…...
Springboot开发的大学生寝室考勤系统刷脸进出宿舍系统论文
摘要 近年来随着社会科学技术的全面进步及高等教育的普及,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期,学生作为预备的高新技术人才数量也在急剧上升,随之而来的就是高校管理上的一系列问题,首当其冲的便是高校应对…...
从GEDI L4A数据到论文图表:如何用Python和geemap进行AGBD时空分析与可视化
从GEDI L4A数据到论文图表:Python与geemap实现AGBD科研级分析全流程当我们需要量化森林碳储量或评估生态恢复成效时,地上生物量密度(AGBD)是最关键的指标之一。NASA的GEDI卫星通过激光雷达技术,以25米分辨率捕捉全球植…...
从Java全栈开发到云原生:一次真实的面试对话与技术剖析
从Java全栈开发到云原生:一次真实的面试对话与技术剖析 面试场景回顾 在一次真实的互联网大厂Java全栈开发岗位的面试中,面试官和应聘者展开了一场围绕技术栈、项目经验和系统设计的深入交流。面试官以专业严谨的态度,逐步引导应聘者展示其技…...
【咨询业AI Agent应用成熟度评估模型】:基于217家机构实测数据的4级能力图谱与升级路线图
更多请点击: https://codechina.net 第一章:【咨询业AI Agent应用成熟度评估模型】:基于217家机构实测数据的4级能力图谱与升级路线图 本模型基于对全球217家管理咨询、战略咨询与数字化转型服务商的实地调研与系统性能力测评,覆…...
Unity离线语音识别插件:解决无网/隐私/延迟三大痛点
1. 这不是“又一个语音识别SDK”——它解决的是Unity开发者真正卡脖子的三个痛点我在2022年做一款医疗陪护类AR应用时,被语音识别拖垮过整整三个月。当时用的是某云厂商的在线SDK,结果在医院内网环境下,每次识别都要等2.3秒以上,患…...
PwnKit漏洞深度解析:pkexec环境变量劫持与Linux提权原理
1. 这个漏洞不是“又一个提权”,而是Linux权限模型的照妖镜你可能已经看过不少关于CVE-2021-4034的通报,标题里常带着“高危”“远程可利用”“影响所有主流发行版”这类字眼。但说实话,我第一次在Debian 11上复现成功时,并没有立…...
5分钟永久激活Windows和Office的终极解决方案:KMS智能激活工具完整指南
5分钟永久激活Windows和Office的终极解决方案:KMS智能激活工具完整指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗?Offi…...
AI大神吴恩达力荐,轻松入门大语言模型实战(附中文PDF+代码)
这本书由AI科普大神Jay Alammar与BERTopic算法作者Maarten Grootendorst联合撰写,是O’Reilly出版的LLM入门标杆指南,获吴恩达推荐。全书以图解方式讲解LLM原理、提示工程、文本分类生成、多模态应用及优化技术,分为理解原理、应用及优化三部…...
Navicat Premium16 免费安装配置教程(附安装包)
一、下载安装包 官网下载:https://www.navicat.com.cn/products#navicat 可直接网盘下载 链接:https://pan.baidu.com/s/1t3Tx0c8gEaMEifGow_05aQ?pwd8888 二、安装过程 1. 双击安装包 2. 选中“我同意”,点击“下一步”。 3.…...
AI答案优化效果可以靠哪些第三方数据验证?
先给结论:AI答案优化效果要做三层交叉验证AI 答案优化、GEO 服务的效果,不应只听服务商自述,也不适合只靠单张 AI 回答截图判断。更稳妥的做法,是用三层数据交叉验证:AI回答层数据:看品牌是否被提及、位置是…...
如何快速部署大麦自动抢票工具:面向开发者的完整技术指南
如何快速部署大麦自动抢票工具:面向开发者的完整技术指南 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 在热门演出票务市场中…...
