Intel IPP密码库 IPPCP 2018 开发笔记与总结(全)
Part I. 开发指南
内容参考官方文档
《Intel® Integrated Performance Primitives Cryptography Developer Guide, Intel Integrated Performance Primitives 2018》
1. Getting Started
路径说明
- 默认的Intel IPP密码库安装路径<install_dir>为C:/Program files (x86)/IntelSWTools/compilers_and_libraries_2018.x.xxx/<target_os
- 默认的Intel IPP密码库主文件目录<ipp cryptography directory>为<install_dir>/ippcp/.
添加环境变量
- 环境变量(执行如下文件)
- <install_dir>\ipp\bin\ippvars.bat
- <install_dir>\ippcp\bin\ippcpvars.bat
- 手动添加Path
- <install_dir>\redist\ ia32_win\ipp
- <install_dir>\redist\ intel64_win\ippcp
然后分别运行
- <install_dir>\ippcp\tools\ia32\perfsys\ps_ippcp.exe
- <install_dir>\ippcp\tools\intel64\perfsys\ps_ippcp.exe
检测这两个程序是否能正常运行;正常运行则设置正确。
2. Theory of Operation
默认的接口函数是一个分派接口而已,它会根据CPU型号去分配对于的真正实现的库。根据CPU型号实现的库和函数会以该CPU标识为前缀。
比如ippsSHA256Update()是一般的接口,内含很多版本。在64-bit 应用的第二代Core处理器会调用e9_ippsSHA256Update(),在64-bit 应用的支持SSE4.2的处理器上会调用y8_ippsSHA256Update()。
表 CPU型号的前缀标识表
3. Linking Your Application
Intel IPP密码库支持四种链接方式:单线程静态库、单线程动态库、多线程静态库、多线程动态库。
- 单线程库已带,安装后路径为
<ipp cryptography directory>/lib/<arch>
- 多线程库需单独下载,安装后路径为
<ipp cryptography directory>/lib/<arch>/threaded
库名 | 单线程 | 多线程 |
静态库 | ippcpmt.lib | ippcpmt.lib |
动态库 | ippcp.lib | ippcp.lib |
4. Programming in the VS* IDE
1. VS IDE添加路径
最好把IPP的相关路径也添加进去,因为有很多需要IPP。
工具 → 选项 → 环境很解决方案 → VC目录,添加对应平台的include文件和lib文件。
- include
- <install_dir>\ipp\include
- <install_dir>\ippcp\include
- Lib
- <install_dir>\ipp\lib\<arch>_win,<arch> 为ia32或者intel64
- <install_dir>\ippcp\lib\<arch>_win,<arch> 为ia32或者intel64
- bin(是否需要添加,因为环境变量已经添加)
- <install_dir>\redist\<arch>_win\ipp,<arch> 为ia32或intel64
- <install_dir>\redist\<arch>_win\ippcp,<arch> 为ia32或intel64
2. 工程添加库
项目 → 属性 → 配置属性 → 链接器 → 输入 → 附加依赖性,添加需要的lib文件。例如动态链接需要ippcp.lib,静态链接需要ippcpmt.lib。
附录A Performance Test Tool
- <install_dir>\ippcp\tools\ia32\perfsys\ps_ippcp.exe
- <install_dir>\ippcp\tools\intel64\perfsys\ps_ippcp.exe
附录B Threading and OpenMP
如果应用层已经采用多线程来调用 IPP 密码库,则底层最好使用单线程密码库。否则,应用层和底层IPP密码库都使用多线程的话,会出现Nested parallelization,从而导致效率降低。
Part II. 开发参考手册
1. Overview
1.1 Function Context Structures
两种上下文:
- Spec为后缀,表示函数操作时不做更改
- State为后缀,表示函数操作时要做更改
2. Symmetric Cryptography
2.1加解密步骤
其中<Alg>指具体的密码算法,<Mode>指ECB、CBC、OFB、CFB、CTR模式。
执行步骤:
步骤1. 获取ctx大小:ipps<Alg>GetSize(int* pSize);其中<Alg>指具体的密码算法。
步骤2. 内存分配:pCtx = malloc(Size),分配Size字节内存给密码算法的pCtx;
步骤3. 初始化(密钥扩展):ipps<Alg>Init,需指定密钥。
步骤4. 加解密:调用ipps<Alg>Encrypt<Mode>或者ipps<Alg>Decrypt<Mode>,这里要设定IV,且IV在执行后会变化。
步骤5. 反初始化(数据清除):调用ipps<Alg>Init,但让key置为NULL。
步骤6. 内存释放:free(pCtx)。
注:
1. 还有个ipps<Alg>SetKey用于重新设定密钥,功能与ipps<Alg>Init类似;两者差异未知,猜测可能Init涉及一些别的特殊操作。
2.2 支持的密码算法和工作模式
表X 支持的密码算法和工作模式
模式算法 | AES | TDES/DES | SM4 | ARCFour |
ECB | Y | Y | Y | RC4为流密码 |
CBC | Y | Y | Y | |
CFB | Y | Y | Y | |
OFB | Y | Y | Y | |
CTR | Y | Y | Y | |
CCM | Y | X | Y(2018版) | |
GCM | Y | X | X | |
XTS | Y | X | X | |
SIV | Y | X | X |
补充说明
- TDES = DES加密(K1) → DES解密(K2) → DES加密(K1) 。
- ARCFour即RC4算法。
- CCM、GCM、SIV为认证加密模式;XTS为磁盘加密模式。
2.3 函数说明
2.3.1 获取上下文大小GetSize
IppStatus ippsAESGetSize(int* pSize);
IppStatus ippsDESGetSize(int* pSize);
IppStatus ippsSMS4GetSize(int* pSize);
IppStatus ippsARCFourGetSize(int* pSize);
参数说明
- pSize:OUT,CTX大小,单位字节。
2.3.2 初始化和反初始化Init
IppStatus ippsAESInit(const Ipp8u* pKey, int keylen, IppsAESSpec* pCtx, int ctxSize);
IppStatus ippsDESInit(const Ipp8u* pKey, IppsDESSpec* pCtx);
IppStatus ippsSMS4Init(const Ipp8u* pKey, int keyLen, IppsSMS4Spec* pCtx, int ctxSize);
IppStatus ippsARCFourInit(const Ipp8u* pKey, int keyLen, IppsARCFourState* pCtx);
参数说明
- pKey:IN,密钥。
- keyLen:IN,密钥字节长度。
- pCtx:OUT,密码算法上下文。
- ctxSize:IN,CTX大小,单位字节。
补充说明
- SM4的密钥长度必须是16。RC4密钥长度为1—256字节。
- 将pKey设置为NULL则执行反初始化。
- TDES需要对三个密钥各执行ippsDESInit以初始化三个IppsDESSpec*。
2.3.3 重置密钥SetKey
仅AES和SM4有重置密钥函数
IppStatus ippsAESSetKey(const Ipp8u* pKey, int keylen, IppsAESSpec* pCtx);
IppStatus ippsSMS4SetKey(const Ipp8u* pKey, int keyLen, IppsSMS4Spec* pCtx);
参数说明
- pKey:IN,密钥。
- keyLen:IN,密钥字节长度。
- pCtx:OUT,密码算法上下文。
补充说明
- pCtx必须是已经Init了的才能调用此函数。
2.3.4 上下文导入导出Pack/Unpack
SM4无上下文导入导出。
IppStatus ippsAESPack (const IppsAESSpec* pCtx, Ipp8u* pBuffer, int bufSize);
IppStatus ippsAESUnpack (const Ipp8u* pBuffer, IppsAESSpec* pCtx, int ctxSize);
IppStatus ippsDESPack (const IppsDESSpec* pCtx, Ipp8u* pBuffer);
IppStatus ippsDESUnpack (const Ipp8u* pBuffer, IppsDESSpec* pCtx);
IppStatus ippsARCFourPack (const IppsARCFourState* pCtx, Ipp8u* pBuffer);
IppStatus ippsARCFourUnpack (const Ipp8u* pBuffer, IppsARCFourState* pCtx);
参数说明
(A)导出/Pack时
- pCtx:IN,上下文。
- pBuffer:OUT,导出缓冲区。
- bufSize:IN,有的函数无。
(B)导入/Unpack时
- pBuffer:IN,导入缓冲区。
- pCtx:OUT,上下文。
- ctxSize:IN,上下文。
备注:
- 无论缓冲区pBuffer字节大小还是上下文pCtx字节大小,都调用ipps***GetSize获得。
- SM4无上下文导入导出。
- AES有bufSize和ctxSize是因为AES的密钥有三种长度,使得其buf和ctx不定长。
2.3.5 AES加解密
IppStatus ippsAESEncryptECB( const Ipp8u *pSrc, Ipp8u *pDst, int srclen, const IppsAESSpec* pCtx);
IppStatus ippsAESDecryptECB( const Ipp8u* pSrc, Ipp8u* pDst, int srclen, const IppsAESSpec* pCtx);
IppStatus ippsAESEncryptCBC( const Ipp8u* pSrc, Ipp8u* pDst, int srclen, const IppsAESSpec* pCtx, const Ipp8u* pIV);
IppStatus ippsAESDecryptCBC( const Ipp8u* pSrc, Ipp8u* pDst, int srclen, const IppsAESSpec* pCtx, const Ipp8u* pIV);
IppStatus ippsAESEncryptCFB( const Ipp8u* pSrc, Ipp8u* pDst, int srcLen, int cfbBlkSize, const IppsAESSpec* pCtx, const Ipp8u *pIV);
IppStatus ippsAESDecryptCFB( const Ipp8u* pSrc, Ipp8u* pDst, int srclen, int cfbBlkSize, const IppsAESSpec* pCtx, const Ipp8u*pIV);
IppStatus ippsAESEncryptOFB ( const Ipp8u* pSrc, Ipp8u* pDst, int srclen, int ofbBlkSize, const IppsAESSpec* pCtx, Ipp8u* pIV);
IppStatus ippsAESDecryptOFB ( const Ipp8u* pSrc, Ipp8u* pDst, int srclen, int ofbBlkSize, const IppsAESSpec* pCtx, Ipp8u* pIV);
IppStatus ippsAESEncryptCTR( const Ipp8u* pSrc, Ipp8u* pDst, int srcLen,const IppsAESSpec* pCtx, Ipp8u* pCtrValue , int ctrNumBitSize);
IppStatus ippsAESDecryptCTR( const Ipp8u* pSrc, Ipp8u* pDst, int srcLen,const IppsAESSpec* pCtx, Ipp8u* pCtrValue, int ctrNumBitSize);
以下是在2018版中发现的新增接口,CBC的CS模式,2017版无。
IppStatus ippsAESEncryptCBC_CS1 (const Ipp8u* pSrc, Ipp8u* pDst, int srclen, const IppsAESSpec* pCtx, const Ipp8u* pIV);
IppStatus ippsAESEncryptCBC_CS2 (const Ipp8u* pSrc, Ipp8u* pDst, int srclen, const IppsAESSpec* pCtx, const Ipp8u* pIV);
IppStatus ippsAESEncryptCBC_CS3 (const Ipp8u* pSrc, Ipp8u* pDst, int srclen, const IppsAESSpec* pCtx, const Ipp8u* pIV);
IppStatus ippsAESDecryptCBC_CS1 (const Ipp8u* pSrc, Ipp8u* pDst, int srclen, const IppsAESSpec* pCtx, const Ipp8u* pIV);
IppStatus ippsAESDecryptCBC_CS2 (const Ipp8u* pSrc, Ipp8u* pDst, int srclen, const IppsAESSpec* pCtx, const Ipp8u* pIV);
IppStatus ippsAESDecryptCBC_CS3 (const Ipp8u* pSrc, Ipp8u* pDst, int srclen, const IppsAESSpec* pCtx, const Ipp8u* pIV);
表X 参数列表
AES | pSrc | pDst | srcLen | pCtx | pIV | 其它 |
ECB | Y | Y | Y | Y | — | — |
CBC | Y | Y | Y | Y | Y | — |
CBC_CS1 | Y | Y | Y | Y | Y | — |
CBC_CS2 | Y | Y | Y | Y | Y | — |
CBC_CS3 | Y | Y | Y | Y | Y | — |
CFB | Y | Y | Y | Y | Y | cfbBlkSize |
OFB | Y | Y | Y | Y | Y | ofbBlkSize |
CTR | Y | Y | Y | Y | — | pCtrValue ctrNumBitSize |
参数说明
- pSrc:IN,加密时为明文,解密时为密文。
- srclen:IN,Src的字节长度。
- pDst:OUT,加密时为密文,解密时为明文。长度等于srclen。
- pCtx:IO,密码算法上下文。
- pIV:IO,初始化向量,长度同分组大小,调用后会改变。ECB无。
- pCtrValue:IO,CTR的计数器,相当于其它模式的初始化向量。
- ctrNumBitSize:IN,计数器中有效的计数比特长度(从右端计)。
- cfbBlkSize/ ofbBlkSize:CFB/OFB每拍输出的密钥流字节数,小于分组大小。
备注1:CBC_CS采用密文偷取技术,使得数据多次加密时使用不便。因此,建议这种模式下一次性输入完毕明文/密文。
备注2:srcLen长度说明。
表X srcLen说明
AES | srcLen |
ECB | 16 | srcLen |
CBC | 16 | srcLen |
CFB | cfbBlkSize | srcLen |
OFB | ofbBlkSize | srcLen |
CTR | 任意长度。 但非最后一次调用时都要求16 | srcLen |
CTR中srcLen长度的进一步说明
若srcLen不是16的整数倍,则生成的多余的密钥流会被丢弃。下次再送入数据时,会用新的CTR值加密作为密钥流。
例如,第1次送入33字节,第二次再送入31字节。第一次生成48字节密钥流,前33字节密钥流用于加密,后15字节密钥流丢弃;第二次重新产生32字节,前31字节密钥流用于加密,后1字节密钥流丢弃。这样一来,由于第一次加密时丢弃了15字节密钥流,就导致了其加密结果和我们期望的结果不一致。
2.3.6 AES其它模式
AES加密认证涉及CCM、GCM、SIV,详情参见官方文档。本文档略。
AES磁盘加密涉及XTS模式,详情参见官方文档。本文档略。
2.3.7 TDES加解密
IppStatus ippsTDESEncryptECB(const Ipp8u *pSrc, Ipp8u *pDst, int srclen, const IppsDESSpec *pCtx1, const IppsDESSpec *pCtx2, const IppsDESSpec * pCtx3, IppsCPPadding padding);
IppStatus ippsTDESDecryptECB(const Ipp8u *pSrc, Ipp8u *pDst, int srclen, const IppsDESSpec *pCtx1, const IppsDESSpec *pCtx2, const IppsDESSpec * pCtx3, IppsCPPadding padding);
IppStatus ippsTDESEncryptCBC(const Ipp8u *pSrc, Ipp8u *pDst, int srclen, const IppsDESSpec *pCtx1, const IppsDESSpec *pCtx2, const IppsDESSpec * pCtx3, const Ipp8u *pIV, IppsCPPadding padding);
IppStatus ippsTDESDecryptCBC(const Ipp8u *pSrc, Ipp8u *pDst, int srclen, const IppsDESSpec *pCtx1, const IppsDESSpec *pCtx2, const IppsDESSpec * pCtx3, const Ipp8u *pIV, IppsCPPadding padding);
IppStatus ippsTDESEncryptCFB(const Ipp8u *pSrc, Ipp8u *pDst, int srclen, int cfbBlkSize, const IppsDESSpec *pCtx1, const IppsDESSpec *pCtx2, const IppsDESSpec *pCtx3, const Ipp8u *pIV, IppsCPPadding padding);
IppStatus ippsTDESDecryptCFB(const Ipp8u *pSrc, Ipp8u *pDst, int srclen, int cfbBlkSize, const IppsDESSpec *pCtx1, const IppsDESSpec *pCtx2, const IppsDESSpec *pCtx3, const Ipp8u *pIV, IppsCPPadding padding);
IppStatus ippsTDESEncryptOFB (const Ipp8u* pSrc, Ipp8u* pDst, int srclen, int ofbBlkSize, const IppsDESSpec *pCtx1, const IppsDESSpec *pCtx2, const IppsDESSpec *pCtx3, Ipp8u* pIV);
IppStatus ippsTDESDecryptOFB (const Ipp8u* pSrc, Ipp8u* pDst, int srclen, int ofbBlkSize, const IppsDESSpec *pCtx1, const IppsDESSpec *pCtx2, const IppsDESSpec *pCtx3, Ipp8u* pIV);
IppStatus ippsTDESEncryptCTR(const Ipp8u *pSrc, Ipp8u *pDst, int srclen, const IppsDESSpec *pCtx1, const IppsDESSpec *pCtx2, const IppsDESSpec *pCtx3,Ipp8u *pCtrValue, int ctrNumBitSize);
IppStatus ippsTDESDecryptCTR(const Ipp8u *pSrc, Ipp8u *pDst, int srcLen,const IppsDESSpec *pCtx1, const IppsDESSpec *pCtx2, const IppsDESSpec *pCtx3, Ipp8u *pCtrValue, int ctrNumBitSize);
表X 参数列表
TDES | pSrc | pDst | srcLen | pCtx1-3 | pIV | padding | 其它 |
ECB | Y | Y | Y | Y | — | Y | — |
CBC | Y | Y | Y | Y | Y | Y | — |
CFB | Y | Y | Y | Y | Y | Y | cfbBlkSize |
OFB | Y | Y | Y | Y | Y | — | ofbBlkSize |
CTR | Y | Y | Y | Y | — | — | pCtrValue ctrNumBitSize |
参数说明
- pSrc:IN,加密时为明文,解密时为密文。
- srclen:IN,Src的字节长度。
- pDst:OUT,加密时为密文,解密时为明文。长度等于srclen。
- pCtx1,pCtx2,pCtx3:IO,密码算法上下文,三个密钥对应三个上下文。
- pIV:IO,初始化向量,长度同分组大小,调用后会改变。ECB无。
- padding:IN,目前好像只支持IppsPaddingNONE(不填充)。具体待查。
- pCtrValue:IO,CTR的计数器,相当于其它模式的初始化向量。
- ctrNumBitSize:IN,计数器中有效的计数比特长度(从右端计)。
- cfbBlkSize/ ofbBlkSize:CFB/OFB每拍输出的密钥流字节数,小于分组大小。
备注:
- padding:具体待查。
2.3.8 SM4加解密
IppStatus ippsSMS4EncryptECB(const Ipp8u *pSrc, Ipp8u *pDst, int len, const IppsSMS4Spec* pCtx);
IppStatus ippsSMS4DecryptECB(const Ipp8u* pSrc, Ipp8u* pDst, int len, const IppsSMS4Spec* pCtx);
IppStatus ippsSMS4EncryptCBC(const Ipp8u* pSrc, Ipp8u* pDst, int len, const IppsSMS4Spec* pCtx, const Ipp8u* pIV);
IppStatus ippsSMS4DecryptCBC(const Ipp8u* pSrc, Ipp8u* pDst, int len, const IppsSMS4Spec* pCtx, const Ipp8u* pIV);
IppStatus ippsSMS4EncryptCFB(const Ipp8u* pSrc, Ipp8u* pDst, int len, int cfbBlkSize, const IppsSMS4Spec* pCtx, const Ipp8u *pIV);
IppStatus ippsSMS4DecryptCFB(const Ipp8u* pSrc, Ipp8u* pDst, int len, int cfbBlkSize, const IppsSMS4Spec* pCtx, const Ipp8u* pIV);
IppStatus ippsSMS4EncryptOFB (const Ipp8u* pSrc, Ipp8u* pDst, int len, int ofbBlkSize, const IppsSMS4Spec* pCtx, Ipp8u* pIV);
IppStatus ippsSMS4DecryptOFB (const Ipp8u* pSrc, Ipp8u* pDst, int len, int ofbBlkSize, const IppsSMS4Spec* pCtx, Ipp8u* pIV);
IppStatus ippsSMS4EncryptCTR(const Ipp8u* pSrc, Ipp8u* pDst, int len, const IppsSMS4Spec* pCtx, Ipp8u* pCtrValue , int ctrNumBitSize);
IppStatus ippsSMS4DecryptCTR(const Ipp8u* pSrc, Ipp8u* pDst, int len, const IppsSMS4Spec * pCtx, Ipp8u* pCtrValue, int ctrNumBitSize);
以下是在2018版中发现的新增接口,CBC的CS模式,2017版无。
IppStatus ipps SMS4EncryptCBC_CS1 (const Ipp8u* pSrc, Ipp8u* pDst, int srclen, const IppsSMS4Spec * pCtx, const Ipp8u* pIV);
IppStatus ipps SMS4EncryptCBC_CS2 (const Ipp8u* pSrc, Ipp8u* pDst, int srclen, const IppsSMS4Spec * pCtx, const Ipp8u* pIV);
IppStatus ipps SMS4EncryptCBC_CS3 (const Ipp8u* pSrc, Ipp8u* pDst, int srclen, const IppsSMS4Spec * pCtx, const Ipp8u* pIV);
IppStatus ipps SMS4DecryptCBC_CS1 (const Ipp8u* pSrc, Ipp8u* pDst, int srclen, const IppsSMS4Spec * pCtx, const Ipp8u* pIV);
IppStatus ipps SMS4DecryptCBC_CS2 (const Ipp8u* pSrc, Ipp8u* pDst, int srclen, const IppsSMS4Spec * pCtx, const Ipp8u* pIV);
IppStatus ipps SMS4DecryptCBC_CS3 (const Ipp8u* pSrc, Ipp8u* pDst, int srclen, const IppsSMS4Spec * pCtx, const Ipp8u* pIV);
表X 参数列表
SM4 | pSrc | pDst | srcLen | pCtx | pIV | 其它 |
ECB | Y | Y | Y | Y | — | — |
CBC | Y | Y | Y | Y | Y | — |
CBC-CS1 | Y | Y | Y | Y | Y | — |
CBC-CS2 | Y | Y | Y | Y | Y | — |
CBC-CS3 | Y | Y | Y | Y | Y | — |
CFB | Y | Y | Y | Y | Y | cfbBlkSize |
OFB | Y | Y | Y | Y | Y | ofbBlkSize |
CTR | Y | Y | Y | Y | — | pCtrValue ctrNumBitSize |
参数说明
- pSrc:IN,加密时为明文,解密时为密文。
- srclen:IN,Src的字节长度。
- pDst:OUT,加密时为密文,解密时为明文。长度等于srclen。
- pCtx:IO,密码算法上下文。
- pIV:IO,初始化向量,长度同分组大小,调用后会改变。ECB无。
- pCtrValue:IO,CTR的计数器,相当于其它模式的初始化向量。
- ctrNumBitSize:IN,计数器中有效的计数比特长度(从右端计)。
- cfbBlkSize/ ofbBlkSize:CFB/OFB每拍输出的密钥流字节数,小于分组大小。
备注1:CBC_CS采用密文偷取技术,使得数据多次加密时使用不便。因此,建议这种模式下一次性输入完毕明文/密文。
备注2:srcLen长度说明。
表X srcLen说明
AES | srcLen |
ECB | 16 | srcLen |
CBC | 16 | srcLen |
CFB | cfbBlkSize | srcLen |
OFB | ofbBlkSize | srcLen |
CTR | 任意长度。 但非最后一次调用时都要求16 | srcLen |
CTR中srcLen长度的进一步说明
若srcLen不是16的整数倍,则生成的多余的密钥流会被丢弃。下次再送入数据时,会用新的CTR值加密作为密钥流。
例如,第1次送入33字节,第二次再送入31字节。第一次生成48字节密钥流,前33字节密钥流用于加密,后15字节密钥流丢弃;第二次重新产生32字节,前31字节密钥流用于加密,后1字节密钥流丢弃。这样一来,由于第一次加密时丢弃了15字节密钥流,就导致了其加密结果和我们期望的结果不一致。
2.3.8 SM4-CCM加解认证
在2018版中发现有SM4-CCM,但是SM4执行CCM的可能性较低,所以本部分略。
2.3.9 ARCFour加解密
ARCFour即RC4流密码。本部分略。
2.4 示例代码
2.4.1 AES示例代码
#include “ippcp.h”
// use of the CTR mode
int AES_sample(void)
{
// secret key
Ipp8u key[] = "\x00\x01\x02\x03\x04\x05\x06\x07"
"\x08\x09\x10\x11\x12\x13\x14\x15";
// define and setup AES cipher
int ctxSize;
ippsAESGetSize(&ctxSize);
IppsAESSpec* pAES = (IppsAESSpec*)( new Ipp8u [ctxSize] );
ippsAESInit(key, sizeof(key)-1, pAES, ctxSize);
// message to be encrypted
Ipp8u msg[] = "the quick brown fox jumps over the lazy dog";
// and initial counter
Ipp8u ctr0[] = "\xff\xee\xdd\xcc\xbb\xaa\x99\x88"
"\x77\x66\x55\x44\x33\x22\x11\x00";
// counter
Ipp8u ctr[16];
// init counter before encryption
memcpy(ctr, ctr0, sizeof(ctr));
// encrypted message
Ipp8u ctext[sizeof(msg)];
// encryption
ippsAESEncryptCTR(msg, ctext, sizeof(msg), pAES, ctr, 64);
// init counter before decryption
memcpy(ctr, ctr0, sizeof(ctr));
// decrypted message
Ipp8u rtext[sizeof(ctext)];
// decryption
ippsAESDecryptCTR(ctext, rtext, sizeof(ctext), pAES, ctr, 64);
// remove secret and release resource
ippsAESInit(0, sizeof(key)-1, pAES, ctxSize);
delete [] (Ipp8u*)pAES;
int error = memcmp(rtext, msg, sizeof(msg));
return 0==error;
}
2.4.2 TDES示例代码
// Use of the ECB mode
void TDES_sample(void){
// size of the TDES algorithm block is equal to 8
const int tdesBlkSize = 8;
// get size of the context needed for the encryption/decryption operation
int ctxSize;
ippsDESGetSize(&ctxSize);
// and allocate one
IppsDESSpec* pCtx1 = (IppsDESSpec*)( new Ipp8u [ctxSize] );
IppsDESSpec* pCtx2 = (IppsDESSpec*)( new Ipp8u [ctxSize] );
IppsDESSpec* pCtx3 = (IppsDESSpec*)( new Ipp8u [ctxSize] );
// define the key
Ipp8u key1[] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
Ipp8u key2[] = {0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18};
Ipp8u key3[] = {0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28};
Ipp8u keyX[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
// and prepare the context for the TDES usage
ippsDESInit(key1, pCtx1);
ippsDESInit(key2, pCtx2);
ippsDESInit(key3, pCtx3);
// define the message to be encrypted
Ipp8u ptext[] = {"the quick brown fox jumps over the lazy dog"};
// allocate enough memory for the ciphertext
// note that
// the size of ciphertext is always a multiple of the cipher block size
Ipp8u ctext[(sizeof(ptext)+desBlkSize-1) &~(desBlkSize-1)];
// encrypt (ECB mode) ptext message
// pay attention to the 'length' parameter
// it defines the number of bytes to be encrypted
ippsTDESEncryptECB(ptext, ctext, sizeof(ctext), pCtx1, pCtx2, pCtx3, IppsCPPaddingNONE);
// allocate memory for the decrypted message
Ipp8u rtext[sizeof(ctext)];
// decrypt (ECB mode) ctext message
// pay attention to the 'length' parameter
// it defines the number of bytes to be decrypted
ippsTDESDecryptECB(ctext, rtext, sizeof(ctext), pCtx1, pCtx2, pCtx3, IppsCPPaddingNONE);
// remove actual secret from contexts
ippsDESInit(keyX, pCtx1);
ippsDESInit(keyX, pCtx2);
ippsDESInit(keyX, pCtx3);
// release resources
delete (Ipp8u*)pCtx1;
delete (Ipp8u*)pCtx2;
delete (Ipp8u*)pCtx3;
}
3. One-Way Hash
待更新。
4. Data Authentication
待更新。
5. Public Key Cryptography
待更新。
6. Finite Field Arithmetic
待更新。
附录A: Support Functions and Classes
略。
附录B: Removed Functions
略。
Part III. 实测效率
本章对Intel IPPCP 2018支持的分组密码算法AES、TDES、SM4和杂凑算法SHA1、SHA224、SHA256、SHA384、SHA512、SHA512-224、SHA512-256、SM3、MD5的效率进行测试。
SM2效率待后续更新。
1. 测试平台
表3.1 测试平台信息
测试平台1 | |
CPU | Intel i7 4790@3.6GHz,支持AES NI指令 |
OS | Win7 SP1 64b |
内存 | 8G |
备注 | 测试机,安装Intel IPPCP 2018 |
测试平台2 | |
CPU | Intel i3 4790@3.4GHz,不支持AES NI指令 |
OS | WinXP SP3 32b |
内存 | 4G |
备注 | 工作机,未安装IPPCP,利用复制的IPPCP静态库编译 |
测试平台3 | |
CPU | Intel i5 6300U@2.4GHz,不支持AES NI指令 |
OS | Win7 SP1 64b |
内存 | 8G |
备注 | 笔记本,安装Intel IPPCP 2018 |
2. 测试方法
分组密码算法的测试:在两个平台下均测试分组密码算法的CBC加密的效率。因为测试ECB一次性送入大量数据(如1MB)做加密时的效率和反复送16字节的加密效率有天壤之别,怀疑内部用多线程并行的方式做了优化。
杂凑算法的测试:直接一次性送入大量数据,如1MB进行测试。
为了精确统计,时间采用RDTSC指令读取CPU的时钟周期。
3. 测试结果
表3.2 分组密码算法的密钥扩展性能
(单位cps = cycle/setup,数值越小表示密钥扩展速度越快)
密钥扩展性能 | 平台1的效率 | 平台2的效率 | 平台3的效率 |
AES | 205.4 | 1178.3 | 724.4 |
SM4 | 752.9 | 4346.9 | 2511.5 |
TDES | 5391.1 | 8091.8 | 4814.9 |
表3.3 分组密码算法的CBC加密性能
(单位mbps = 1000000bit/s,数值越大表示密钥扩展速度越快)
CBC加密性能 | 平台1的效率 | 平台2的效率 | 平台3的效率 |
AES | 7110.9 | 1468.1 | 1287.5 |
SM4 | 508.0 | 98.9 | 119.3 |
TDES | 201.9 | 171.8 | 156.7 |
表3.4 杂凑算法的性能
(单位mbps = 1000000bit/s,数值越大表示密钥扩展速度越快)
杂凑算法性能 | 平台1的效率 | 平台2的效率 | 平台3的效率 |
SHA1 | 5239.3 | 4141.9 | 3994.7 |
SHA224 | 2359.9 | 1949.6 | 1708.3 |
SHA256 | 2359.9 | 1945.6 | 1727.2 |
SHA384 | 2381.3 | 1896.8 | 1767.9 |
SHA512 | 2381.4 | 1898.6 | 1728.6 |
SHA512-224 | 2364.5 | 1853.8 | 1756.3 |
SHA512-256 | 2362.6 | 1852.883 | 1768.7 |
SM3 | 1687.2 | 1342.9 | 1240.9 |
md5 | 6043.4 | 4998.9 | 4221.9 |
平均 | — | — |
|
SHA224的本质是SHA256,所以二者速度一样。
SHA384的本质是SHA512,所以二者速度一样。
SHA512-224、SHA512-256的核心是SHA512,所以三者的速度一样。
表3.5 SM2算法的性能
(单位mbps = 次/秒,数值越大表示密钥扩展速度越快)
| 平台1的效率 | 平台2的效率 | 平台3的效率 | 我们的实现 |
SM2签名 | 3314.1 | 2681.1 | 2819.9 | 185.3 |
SM2验签 | 2701.8 | 2170.0 | 2311.6 | 149.1 |
注1:我们的实现是指我们标准C实现的SM2在平台2下测试的效率。
注2:Intel IPPCP无SM2加解密接口,只有签名验签接口。
4. 效率对比
效率和性能差异对比如下。
- 平台性能:平台1主频比平台2高5.9%。
- 分组算法效率:
- AES有近5倍的差异,可能是AES-NI指令所致;
- SM4有5倍的差异则很奇怪,暂时无法解释;
- TDES的性能提升,与杂凑算法的性能提升接近。
- 杂凑算法效率:平台1比平台2提升20%—28%,平均为24.6%;平台2比平台3提升5%-15%,平均为9.4%。
- SM2效率:平台1比平台2提升24%左右;平台2比平台3反而降低6%左右。SM2比我们自己标准C实现的性能有了显著的提升。
5. 结论
从目前的分析的Intel IPP Cryptography效率测试结果看:
- SM4效率不如查大表效率高,在一些平台上的效率还不如查小表运算。
- SM3效率比目前的实现高17%。
- SM2效率待后续更新。
- AES在支持AES-NI的CPU上执行效率很高,但目前有使用AES-NI指令的开源代码,短小精炼。
国密算法在Intel IPP Cryptography上没有显著的综合性能提升,而且使用复杂,代码不开源,因此暂不推荐使用。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 建立任务,OSTaskCreate()源码解析
想让uC/OS-Ⅱ管理用户的任务,用户必须要先建立任务。用户可以通过传递任务地址和其它参数到以下两个函数之一来建立任务:OSTaskCreate() 或 OSTaskCreateExt()。OSTaskCreate()与uC/OS是向下兼容的,OSTaskCreateExt()是OSTaskCreate()的扩展版本,提供了一些附加的功能。用两…...
2024/4/24 15:03:00 - Boom 3D for Mac(音量增强器和均衡器)
Boom 3D for Mac是Mac平台上一款音量增强器和均衡器,boom 3d for mac破解版提供了均衡器和音频效果用于优化音频,你还能调整Mac上每个应用程序的音量,功能还是很全面,有需要音量增强器的朋友可以试试这款boom 3d破解版哦!boom 3d for mac 破解说明下载好Boom 3D安装包后,…...
2024/4/15 2:57:41 - 易宝支付开发文档
1、支付请求 <form action="${pageContext.request.contextPath}/yinlian?op=pay" method="post"> <div style="width: 100%;" align="center"> <div style="background-color:gray;width: 550px;…...
2024/4/28 0:40:52 - python爬虫爬取的网页数据解压缩的处理
网页压缩技术主要两种gzip和deflateDEFLATE是一个无专利的压缩算法,它可以实现无损数据压缩,有众多开源的实现算法。 GZIP是使用DEFLATE进行压缩数据的另一个压缩库。现在普遍支持gzip压缩,Deflate只是一种过时的网页压缩if __name__ == "__main__":url=http://ww…...
2024/4/15 2:57:39 - 基于Maven的UReport2项目搭建---报表设计
ureport最新源码可以到https://github.com/youseries/ureport上下载一、首先创建一个标准的maven项目,在pom.xml文件中添加UReport2依赖,如下所示:<!--制表插件ureport--> <dependency><groupId>com.bstek.ureport</groupId><artifactId>urep…...
2024/4/15 2:57:38 - 三元组损失原理与选取策略
三元组损失概述 三元组损失(Triplet loss)函数是当前应用较为广泛的一种损失函数,最早由Google研究团队在论文《FaceNet:A Unified Embedding for Face Recognition》所提出,常用在人脸识别任务中。目的是做到非同类极相似样本的区分,比如说对兄弟二人的区分。 所以,Tri…...
2024/4/24 15:02:59 - 服务端
购买云服务器 腾讯云https://cloud.tencent.com/act/campus购买后进入控制台,登录云服务器。 配置环境 又卡着了,研究研究...
2024/4/24 15:02:58 - nginx的配置——实现网页压缩和图片压缩
1.为什么要进行压缩? 在实际的企业当中,nginx服务器上的资源要尽可能的占用的空间少一点 实际上信息量大的网页和高清图片占用存储空间是非常大的,这样不利于服务器性能的优化 因此我们要在服务器上面将网页和图片进行压缩,让客户端去下载就可以了 2.实现网页压缩(1)查看…...
2024/4/24 15:02:59 - 易宝支付在线支付测试注意事项:
易宝支付在线支付测试注意事项:1.刚开始测试支付最好使用我们提供的测试商户帐号及配套的密钥: merchantID=10000432521 keyValue=8UPp0KE8sq73zVP370vko7C39403rtK1YwX40Td6irH216036H27Eb12792t 因为这样我才能配合您发现问题。2.该测试帐户有金额限制,在使用时最好用范…...
2024/4/24 15:02:57 - uCOS-II OSTaskCreate函数分析
ucos版本:V2.91函数名:OSTaskCreate函数原型位置:os_task.c:206行首先看形参列表及返回值:返回值类型为INT8U,用于保存错误标志。第一个参数为:void (*task)(void *p_arg),此处为一函数指针,用于指定任务执行的函数。第二个参数为:void *p_arg,用于指定任务执行函数的…...
2024/4/24 15:02:55 - Ureport2源码修改:增加自定义功能
Ureport2源码修改:单元格超链接增加弹出窗口显示功能需求来源功能实现ureport2-js项目:ureport2-console项目:ureport2-core项目:最终效果 新人第一次发帖,求轻喷 需求来源 最近在工作的一个项目中涉及本身包含较多的报表(由其他付费报表工具开发),由于客户资金有限,给…...
2024/4/24 15:02:54 - Java实现JPBC密码库的实验
前言由于自己的密码学实验需要,决定先到CSDN上找一些关于使用JAVA语言在Eclipse上通过JPBC密码库对实验中相关的密码运算进行模拟。但是找了很久发现写JPBC的博客少之又少,如果是使用Java语言实现的就几乎没有。于是自己决定在完成试验之后写一篇自己配置实验环境的心得。注意…...
2024/4/24 15:02:53 - 使用Apache作为前端负载均衡器
在某些场景中,我们需要在前端放置一个Apache作为负载均衡器,后台有若干台Apusic或者其它的类似于Tomcat/WebLogic等应用服务器,客户端发送到Apache的请求,将被分配到后台的这些真正完成请求的服务器上。本文描述如何使用Apache作为负载均衡器的方法和不同的负载均衡的配置。…...
2024/4/24 15:02:53 - TortoiseGit安装,认证配置 ——最全
配置git 1.关于git版本控制系统2.下载 下载地址 https://git-scm.com/ 或 https://gitforwindows.org/此文件下载较慢,建议使用IDM 3.安装4.测试TortoiseGit 1.关于TortoiseGitTortoiseGit是一个菜单式(图形化)git工具,区别于命令式。 基于Git工具,所有安装TortoiseGit之前…...
2024/4/28 1:41:05 - 构建wifi破解所需的密码库文件
准备密码库文件: 1、可以从其他的文件中获取 比如,网上流传的一下密码库文件,通过shell命令排序,除重后,即可获得一个密码库文件了。 最有名气的就是CSDN当年的数据库文件了,自己备份了一份,将原始的.sql中的csdn用户名、csdn密码和注册邮件名都作为新的wifi密码来保存后…...
2024/4/24 15:02:50 - F5负载均衡器的功能介绍
基于庞大的网络结构,集群服务器的使用带来了不少流量等负载问题。那么相对的,负载均衡的技术也应运而生。每一种技术都需要产品的支持,那么现在我们来认识一下F5,是负载均衡器的一种。那么首先我们先把产品的结构功能进行一下介绍。许多厂商推出了专用于平衡服务器负载的负载…...
2024/4/24 15:02:49 - uC/OS II 函数说明 之–OSTaskCreate()与OSTaskCreateExt()
1. OSTaskCreate() OSTaskCreate()建立一个新任务,可以在多任务环境启动之前,或者运行任务中建立任务。注意,ISR中禁止建立任务,一个任务必须为无限循环结构。 源代码如下:#if OS_TASK_CREATE_EN > 0 /* 条件编译,是否允许任务的创建 …...
2024/4/24 15:02:53 - 易宝支付银行接口,各参数
可直连银行 pd_FrpId参数值 对应支付通道名称 1000000-NET 易宝会员支付 ICBC-NET-B2C 工商银行 CMBCHINA-NET-B2C 招商银行 ABC-NET-B2C 中国农业银行 CCB-NET-B2C 建设银行 BCCB-NET-B2C 北京银行 BOCO-NET-B2C 交通银行 CIB-NET-B2C 兴业银行 NJCB-NET-B2C 南京银行 CMBC-NE…...
2024/4/15 2:57:49 - 【linux、windows】一分钟开启apache网页压缩
以下介绍的方法,linux和windows是通用的。一、进入apache的配置文件http.conf,开启以下两个拓展(xampp环境下,两个拓展一般是默认开启的,进入文件确认下,只要这两句话前面没有#号就成)。LoadModule deflate_module modules/mod_deflate.soLoadModule headers_module modu…...
2024/4/18 10:50:38 - UReport2 - 套打实现
UReport2 – 套打 官方说明官网地址:http://wiki.bsdn.org/pages/viewpage.action?pageId=76449435 套打背景图路径 填写 经各种测试; 相对路径;绝对路径无效; 后来发现 用地址: http://localhost:8080/Urreport-0.0.1-SNAPSHOT/test.jpg 即可 当前图片的路径 只要放在项…...
2024/4/15 2:57:47
最新文章
- 【C++】简易二叉搜索树
目录 一、概念: 二、代码实现: 大致结构: 1、遍历: 2、insert 3、find 4、erase 三、总结: 一、概念: 二叉搜索树又称为二叉排序树,是一种具有特殊性质的二叉树,对于每一个节…...
2024/4/28 4:12:38 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 01背包问题 小明的背包
2.小明的背包1 - 蓝桥云课 (lanqiao.cn) #include <bits/stdc.h> using namespace std; const int N1010;//开始写的105 开小了 样例过了但最后只过了很少一部分 int n,m; int v[N],w[N]; int f[N][N];int main() {cin>>n>>m;for(int i1;i<n;i){cin>&…...
2024/4/22 8:36:15 - 【C++】C++中的list
一、介绍 官方给的 list的文档介绍 简单来说就是: list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中…...
2024/4/22 17:51:44 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/26 18:09:39 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/28 3:28:32 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/26 23:05:52 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/27 4:00:35 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/27 9:01:45 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/28 1:22:35 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/25 18:39:00 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/26 19:46:12 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/27 11:43:08 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/27 8:32:30 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57