热点
手机体验师:三星Z Flip7 FE何时入手最划算?,reasoning_content:我们要求以手机体验师的口吻,写一个关于三星Galaxy Z Flip7 FE最佳入手时机全解析的标题需要简短精炼,30字以内直接输出标题,不要加说明nn注意:标题要体现手机体验师的口吻,可能用第一人称或专家的语气例如:手机体验师教你:三星Z Flip7 FE何时入手最划算? 但字数要控制最好更简洁nn可能的三星Z Flip7 FE最佳入手时机,手机体验师详解 但字数超了?数一下:三星Z Flip7 FE最佳入手时机,手机体验师详解 – 共16个字?中文:三星Z Flip7 FE最佳入手时机,手机体验师详解 – 实际字符:三、星、Z、空、格、F、l、i、p、7、空、格、F、E、最、佳、入、手、时、机、,、手、机、体、验、师、详、解 – 共28个字符?注意:中文标点算一个,空格算一个但通常标题中空格可以省略或者用英文的Z Flip7 FE中间空格?最好简洁nn更简洁:手机体验师:三星Z Flip7 FE何时入手最佳? 字数:手机体验师:三星Z Flip7 FE何时入手最佳? – 共16个汉字+英文?数:手、机、体、验、师、:、三、星、Z、空、F、l、i、p、7、空、F、E、何、时、入、手、最、佳、? – 25个字符,可以但Z Flip7 FE中空格可以去掉?通常写法为Z Flip7 FE 或 Galaxy Z Flip7 FE?标题中写三星Galaxy Z Flip7 FE太长可以简化为三星Z Flip7 FEnn但原要求是三星Galaxy Z Flip7 FE,但标题可以省略Galaxy?三星Galaxy Z Flip7 FE共11个汉字+英文?我们尽量完整目标30字以内,完全可以用全称例如:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 共16个字?数一下:三、星、G、a、l、a、x、y、空格、Z、空格、F、l、i、p、7、空格、F、E、最、佳、入、手、时、机、全、解、析 – 28个字符,稍微超了一点?注意:中文汉字每个占一个字符,英文字母和空格也占一个28个字符,但通常标题字数指汉字数量?不严格但为了保险,可以更精简nn或者:手机体验师解析三星Z Flip7 FE最佳入手时机 – 汉字+英文:手机体验师解析三星Z Flip7 FE最佳入手时机 – 共18个汉字?数:手、机、体、验、师、解、析、三、星、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机 – 24个字符,可以但缺了全解析?或者直接用最佳入手时机解析nn考虑到要体现手机体验师的口吻,最好以第一人称或专家身份例如:手机体验师:三星Z Flip7 FE何时入手最划算? 这个很简洁或者手机体验师教你选三星Z Flip7 FE入手时机 但字数nn最终决定:用手机体验师:三星Galaxy Z Flip7 FE最佳入手时机 但少了全解析?可以加解析二字但字数可能超我们严格数一下:手机体验师:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 共:手机体验师:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 汉字:手、机、体、验、师、:、三、星、G、a、l、a、x、y、空、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机、全、解、析 – 共34个字符,超了30字所以需要精简nn去掉Galaxy:手机体验师:三星Z Flip7 FE最佳入手时机全解析 – 汉字:手、机、体、验、师、:、三、星、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机、全、解、析 – 共27个字符,可以注意:冒号算一个,空格算两个(Z后面和7后面各一个?Z Flip7 FE中,通常Z后面有空格,Flip7后面有空格,FE前面有空格?实际上标准写法是Z Flip7 FE,三个单词之间有两个空格但也可以写为Z Flip7 FE 或 Z Flip7 FE 我们数一下:Z空格F l i p 7空格F E – 实际上Z后空格,Flip7是一个整体?Flip7没有空格?通常Flip7是连写,但一般写作Flip 7?这里明确是Z Flip7 FE,Flip7可能是一个词?为了准确,我们按原要求Z Flip7 FE中有空格:Z空格Flip7空格FE?但原题是Z Flip7 FE,我理解为Z,空格,Flip7,空格,FE但Flip7本身没有空格,所以总共两个空格那么字符数:Z(1),空格(1),F(1),l(1),i(1),p(1),7(1),空格(1),F(1),E(1) – 共10个英文字符+2个空格=12个加上前面的汉字手机体验师:三星共7个汉字(手、机、体、验、师、:、三、星)共8个?注意:冒号是中文标点,算一个字符所以汉字部分:手机体验师:三星 – 7个字符(手、机、体、验、师、:、三、星)?实际上手机体验师是4个字,冒号1个,三星2个字,共7个汉字/标点然后英文12个,再加上最佳入手时机全解析共8个汉字(最、佳、入、手、时、机、全、解、析)共9个?全解析是3个字,加上最佳入手时机是5个字,共8个字?不对:最佳入手时机全解析 – 最佳(2)、入手(2)、时机(2)、全(1)、解析(2) 共9个汉字所以总汉字/标点:7+9=16个,英文12个,总28个字符,在30以内可以nn但为了更简洁,也可以去掉全,直接最佳入手时机解析也是8个字?最佳入手时机解析是7个字(最佳2、入手2、时机2、解析2)共8?不对,解析是2个字,共2+2+2+2=8加上前面的7+8=15,英文12=27,也可以或者用最佳入手时机详解nn另一个想法:直接以手机体验师开头,用问句形式手机体验师:三星Z Flip7 FE何时入手最划算? – 字符数:手机体验师:三星Z Flip7 FE何时入手最划算? – 汉字:手、机、体、验、师、:、三、星、何、时、入、手、最、划、算、? – 共16个汉字+标点,英文12个,共28个,合适这个更口语化,符合手机体验师的口吻nn我选择这个
14 9 月 2026, 周一

简单实现强大的加密功能——CryptoAPI

CryptoAPI是Microsoft提供的加密应用程序接口,他其实是一组函数,他为许多高级安全性服务提供了基础,包括用于电子商务的SET,用于加密客户机/服务器消息的PCT,用于在各个平台之间来回传递机密数据和密钥的PFX,代码签名等等。
支持这种功能的主要有2000/XP(98和ME下不详)

其配置信息(密钥)主要在
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
\ Cryptography \Defaults
HKEY_CURRENT_USER\ Software \ Microsoft
\ Cryptography \Providers
中,


下面以两个文件加密与解密的C程序片断为例,演示一下CryptoAPI的强大功能。这两个程序均为Win32控制台应用,程序省略了出错处理,实际运行时请加入。

—-1. 文件加密

#include
#include
#include
#include

//确定使用RC2块编码或是RC4流式编码,这就是CryptoAPI支持的两种基本编码方式

#ifdef USE_BLOCK_CIPHER
#define ENCRYPT_ALGORITHM??CALG_RC2
#define ENCRYPT_BLOCK_SIZE??8
#else
#define ENCRYPT_ALGORITHM??CALG_RC4
#define ENCRYPT_BLOCK_SIZE??1
#endif

void CAPIDecryptFile(PCHAR szSource,
PCHAR szDestination, PCHAR szPassword);

void _cdecl main(int argc, char *argv[])
{
PCHAR szSource??= NULL;
PCHAR szDestination = NULL;
PCHAR szPassword??= NULL;

// 验证参数个数
if(argc != 3 && argc != 4) {
printf(“USAGE: decrypt < source file >
< dest file > [ ]\n”);
exit(1);
}

//读取参数.
szSource??= argv[1];
szDestination = argv[2];
if(argc == 4) {
szPassword = argv[3];
}
CAPIDecryptFile(szSource, szDestination, szPassword);
}

/*szSource为要加密的文件名称,
szDestination为加密过的文件名称,
szPassword为加密口令*/
void CAPIEncryptFile(PCHAR szSource,
PCHAR szDestination, PCHAR szPassword)
{
FILE *hSource = NULL;
FILE *hDestination = NULL;
INT eof = 0;
HCRYPTPROV hProv = 0;
HCRYPTKEY hKey = 0;
HCRYPTKEY hXchgKey = 0;
HCRYPTHASH hHash = 0;
PBYTE pbKeyBlob = NULL;
DWORD dwKeyBlobLen;
PBYTE pbBuffer = NULL;
DWORD dwBlockLen;
DWORD dwBufferLen;
DWORD dwCount;

hSource= fopen(szSource,“rb”));// 打开源文件
hDestination = fopen(szDestination,“wb”) ;//.打开目标文件
// 连接缺省的CSP,密码服务提供者模块(CSP),这是通过WIN系统中捆绑的RSA Base Provider实现的。
CryptAcquireContext(&hProv, NULL, NULL,
PROV_RSA_FULL, 0));
if(szPassword == NULL) {
//口令为空,使用随机产生的会话密钥加密
// 产生随机会话密钥。
CryptGenKey(hProv, ENCRYPT_ALGORITHM,
CRYPT_EXPORTABLE, &hKey)
// 取得密钥交换对的公共密钥
CryptGetUserKey(hProv, AT_KEYEXCHANGE,
&hXchgKey);
// 计算隐码长度并分配缓冲区
CryptExportKey(hKey, hXchgKey,
SIMPLEBLOB, 0, NULL, &dwKeyBlobLen);
pbKeyBlob=malloc(dwKeyBlobLen)) == NULL) ;
// 将会话密钥输出至隐码
CryptExportKey(hKey, hXchgKey,
SIMPLEBLOB, 0, pbKeyBlob, &dwKeyBlobLen));
// 释放密钥交换对的句柄
CryptDestroyKey(hXchgKey);
hXchgKey = 0;
// 将隐码长度写入目标文件
fwrite(&dwKeyBlobLen, sizeof(DWORD), 1, hDestination);
//将隐码长度写入目标文件
fwrite(pbKeyBlob,1,dwKeyBlobLen, hDestination);
} else {
//口令不为空, 使用从口令派生出的密钥加密文件
CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
// 建立散列表
CryptHashData(hHash, szPassword, strlen(szPassword), 0);
//散列口令
// 从散列表中派生密钥
CryptDeriveKey(hProv, ENCRYPT_ALGORITHM, hHash, 0, &hKey);
// 删除散列表
CryptDestroyHash(hHash);
hHash = 0;
}

//计算一次加密的数据字节数,
必须为ENCRYPT_BLOCK_SIZE的整数倍
dwBlockLen = 1000 - 1000 % ENCRYPT_BLOCK_SIZE;
//如果使用块编码,则需要额外空间
if(ENCRYPT_BLOCK_SIZE > 1) {
dwBufferLen=dwBlockLen + ENCRYPT_BLOCK_SIZE;
} else {
dwBufferLen = dwBlockLen;
}
//分配缓冲区
pbBuffer = malloc(dwBufferLen);
//加密源文件并写入目标文件
do {
// 从源文件中读出dwBlockLen个字节
dwCount = fread(pbBuffer, 1, dwBlockLen, hSource);
eof = feof(hSource);
//加密数据
CryptEncrypt(hKey, 0, eof, 0, pbBuffer, &dwCount, dwBufferLen);
// 将加密过的数据写入目标文件
fwrite(pbBuffer, 1, dwCount, hDestination);
} while(!feof(hSource));
printf(“OK\n”);
……//关闭文件、释放内存
}
—-2 文件解密

void CAPIDecryptFile(PCHAR szSource,
PCHAR szDestination, PCHAR szPassword)
{
 ? ……//变量声明、文件操作同文件加密程序

CryptAcquireContext(&hProv, NULL, NULL,
PROV_RSA_FULL, 0);
if(szPassword == NULL) {
// 口令为空,使用存储在加密文件中的会话密钥解密
// 读隐码的长度并分配内存
fread(&dwKeyBlobLen,sizeof(DWORD),1,hSource);
pbKeyBlob=malloc(dwKeyBlobLen))== NULL);
// 从源文件中读隐码.
fread(pbKeyBlob, 1, dwKeyBlobLen, hSource);
// 将隐码输入CSP
CryptImportKey(hProv, pbKeyBlob,
dwKeyBlobLen, 0, 0, &hKey);
} else {
// 口令不为空, 使用从口令派生出的密钥解密文件
CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
CryptHashData(hHash, szPassword, strlen
(szPassword), 0);
CryptDeriveKey(hProv, ENCRYPT_ALGORITHM,
hHash, 0, &hKey);
CryptDestroyHash(hHash);
hHash = 0;
}

dwBlockLen=1000-1000%ENCRYPT_BLOCK_SIZE;
if(ENCRYPT_BLOCK_SIZE > 1) {
 ? dwBufferLen = dwBlockLen + ENCRYPT_BLOCK_SIZE;
} else {
 ? dwBufferLen = dwBlockLen;
}
pbBuffer = malloc(dwBufferLen);

//解密源文件并写入目标文件
do {
dwCount = fread(pbBuffer, 1, dwBlockLen,
hSource);
eof = feof(hSource);
// 解密数据
CryptDecrypt(hKey, 0, eof, 0, pbBuffer, &dwCount);
// 将解密过的数据写入目标文件
fwrite(pbBuffer, 1, dwCount, hDestination);
} while(!feof(hSource));
printf(“OK\n”);
……//关闭文件、释放内存
}
—-以上代码在Windows 2000、Visual C++6.0环境中编译通过。

dawei

【声明】:92手机网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

您错过了

手机体验师:三星Z Flip7 FE何时入手最划算?,reasoning_content:我们要求以手机体验师的口吻,写一个关于三星Galaxy Z Flip7 FE最佳入手时机全解析的标题需要简短精炼,30字以内直接输出标题,不要加说明nn注意:标题要体现手机体验师的口吻,可能用第一人称或专家的语气例如:手机体验师教你:三星Z Flip7 FE何时入手最划算? 但字数要控制最好更简洁nn可能的三星Z Flip7 FE最佳入手时机,手机体验师详解 但字数超了?数一下:三星Z Flip7 FE最佳入手时机,手机体验师详解 – 共16个字?中文:三星Z Flip7 FE最佳入手时机,手机体验师详解 – 实际字符:三、星、Z、空、格、F、l、i、p、7、空、格、F、E、最、佳、入、手、时、机、,、手、机、体、验、师、详、解 – 共28个字符?注意:中文标点算一个,空格算一个但通常标题中空格可以省略或者用英文的Z Flip7 FE中间空格?最好简洁nn更简洁:手机体验师:三星Z Flip7 FE何时入手最佳? 字数:手机体验师:三星Z Flip7 FE何时入手最佳? – 共16个汉字+英文?数:手、机、体、验、师、:、三、星、Z、空、F、l、i、p、7、空、F、E、何、时、入、手、最、佳、? – 25个字符,可以但Z Flip7 FE中空格可以去掉?通常写法为Z Flip7 FE 或 Galaxy Z Flip7 FE?标题中写三星Galaxy Z Flip7 FE太长可以简化为三星Z Flip7 FEnn但原要求是三星Galaxy Z Flip7 FE,但标题可以省略Galaxy?三星Galaxy Z Flip7 FE共11个汉字+英文?我们尽量完整目标30字以内,完全可以用全称例如:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 共16个字?数一下:三、星、G、a、l、a、x、y、空格、Z、空格、F、l、i、p、7、空格、F、E、最、佳、入、手、时、机、全、解、析 – 28个字符,稍微超了一点?注意:中文汉字每个占一个字符,英文字母和空格也占一个28个字符,但通常标题字数指汉字数量?不严格但为了保险,可以更精简nn或者:手机体验师解析三星Z Flip7 FE最佳入手时机 – 汉字+英文:手机体验师解析三星Z Flip7 FE最佳入手时机 – 共18个汉字?数:手、机、体、验、师、解、析、三、星、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机 – 24个字符,可以但缺了全解析?或者直接用最佳入手时机解析nn考虑到要体现手机体验师的口吻,最好以第一人称或专家身份例如:手机体验师:三星Z Flip7 FE何时入手最划算? 这个很简洁或者手机体验师教你选三星Z Flip7 FE入手时机 但字数nn最终决定:用手机体验师:三星Galaxy Z Flip7 FE最佳入手时机 但少了全解析?可以加解析二字但字数可能超我们严格数一下:手机体验师:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 共:手机体验师:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 汉字:手、机、体、验、师、:、三、星、G、a、l、a、x、y、空、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机、全、解、析 – 共34个字符,超了30字所以需要精简nn去掉Galaxy:手机体验师:三星Z Flip7 FE最佳入手时机全解析 – 汉字:手、机、体、验、师、:、三、星、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机、全、解、析 – 共27个字符,可以注意:冒号算一个,空格算两个(Z后面和7后面各一个?Z Flip7 FE中,通常Z后面有空格,Flip7后面有空格,FE前面有空格?实际上标准写法是Z Flip7 FE,三个单词之间有两个空格但也可以写为Z Flip7 FE 或 Z Flip7 FE 我们数一下:Z空格F l i p 7空格F E – 实际上Z后空格,Flip7是一个整体?Flip7没有空格?通常Flip7是连写,但一般写作Flip 7?这里明确是Z Flip7 FE,Flip7可能是一个词?为了准确,我们按原要求Z Flip7 FE中有空格:Z空格Flip7空格FE?但原题是Z Flip7 FE,我理解为Z,空格,Flip7,空格,FE但Flip7本身没有空格,所以总共两个空格那么字符数:Z(1),空格(1),F(1),l(1),i(1),p(1),7(1),空格(1),F(1),E(1) – 共10个英文字符+2个空格=12个加上前面的汉字手机体验师:三星共7个汉字(手、机、体、验、师、:、三、星)共8个?注意:冒号是中文标点,算一个字符所以汉字部分:手机体验师:三星 – 7个字符(手、机、体、验、师、:、三、星)?实际上手机体验师是4个字,冒号1个,三星2个字,共7个汉字/标点然后英文12个,再加上最佳入手时机全解析共8个汉字(最、佳、入、手、时、机、全、解、析)共9个?全解析是3个字,加上最佳入手时机是5个字,共8个字?不对:最佳入手时机全解析 – 最佳(2)、入手(2)、时机(2)、全(1)、解析(2) 共9个汉字所以总汉字/标点:7+9=16个,英文12个,总28个字符,在30以内可以nn但为了更简洁,也可以去掉全,直接最佳入手时机解析也是8个字?最佳入手时机解析是7个字(最佳2、入手2、时机2、解析2)共8?不对,解析是2个字,共2+2+2+2=8加上前面的7+8=15,英文12=27,也可以或者用最佳入手时机详解nn另一个想法:直接以手机体验师开头,用问句形式手机体验师:三星Z Flip7 FE何时入手最划算? – 字符数:手机体验师:三星Z Flip7 FE何时入手最划算? – 汉字:手、机、体、验、师、:、三、星、何、时、入、手、最、划、算、? – 共16个汉字+标点,英文12个,共28个,合适这个更口语化,符合手机体验师的口吻nn我选择这个