C语言制作四位数字密码锁

版权申诉
0 下载量 56 浏览量 更新于2024-10-06 收藏 4KB ZIP 举报
资源摘要信息: "c_key.zip_四位密码锁" 在软件开发领域,使用C语言编写程序是一项基础且重要的技能。本资源文件中,"c_key.zip_四位密码锁" 描述了一个使用C语言实现的四位数字密码锁系统。该系统已经完成调试,能够对输入的四位数字进行识别,并根据是否正确做出相应的动作。以下是对该资源文件中所包含知识点的详细说明。 ### C语言基础知识 - **数据类型**:C语言中的基本数据类型,如整型(int)、字符型(char)等,是构建任何复杂系统的基础。 - **变量与常量**:理解变量的定义、初始化和使用,以及常量的定义和作用。 - **控制结构**:掌握条件语句(if-else)、循环语句(for, while, do-while)等控制结构,是实现复杂逻辑的基石。 - **函数**:函数的定义、参数传递、返回值等概念,对于编写模块化和可重用的代码至关重要。 ### 密码锁系统逻辑 - **四位数字密码**:系统需设置一个预设的四位数字作为正确密码,通常这类密码在程序中以常量形式存储。 - **输入处理**:如何接收用户输入的四位数字,可能涉及到标准输入(如scanf函数)的使用。 - **密码比对逻辑**:比较输入的数字与预设密码,判断是否一致,通常会使用条件语句实现。 - **动作执行**:当密码正确时,系统应执行某些预设动作。这些动作可以是打印消息、控制硬件等,具体实现取决于系统要求。 ### 系统实现细节 - **密码存储与安全性**:密码通常不应以明文形式存储,C语言中可使用加密函数对密码进行处理,增加安全性。 - **错误处理**:如果输入的不是四位数字,系统应能够给出适当的提示并允许用户重新输入,这涉及到错误检测和异常处理。 - **用户界面**:虽然用户界面不是C语言擅长的领域,但对于密码锁系统,提供简洁的用户交互界面是必要的。 ### 调试与测试 - **调试工具**:了解和使用调试工具(如gdb)对于找到程序中的逻辑错误和运行时错误非常有帮助。 - **单元测试**:编写单元测试来验证程序的每个独立部分是否按预期工作,这对于保证程序质量至关重要。 ### 相关技术文档 - **c_key.doc**:从文件名推断,该文档可能包含对上述密码锁系统的详细描述,包括设计思路、功能说明、使用方法以及潜在的代码实现细节。文档中可能还会包括对特定编程问题的解决方案,以及对如何运行和测试程序的指导。 综上所述,"c_key.zip_四位密码锁" 这一资源文件涉及的知识点包括但不限于C语言编程基础、系统逻辑设计、安全性和错误处理、以及调试和测试等方面。掌握这些知识点能够帮助开发者构建出稳定可靠的四位密码锁系统,并在实际应用中对系统进行有效的维护和升级。由于这是一个C语言的实现,所以还应该熟悉C语言的相关编程环境和编译器,例如GCC或Clang,并且能够运用相关工具进行代码的编译和运行。此外,理解和实现密码安全性的最佳实践也是软件开发者需要关注的焦点。
2023-06-04 上传

int main(int argc, char *argv[]) { ec_param *ecp; sm2_ec_key *key_B; message_st message_data; int type = TYPE_GFp; int point_bit_length = 256; char **sm2_param = sm2_param_recommand; ecp = ec_param_new(); ec_param_init(ecp, sm2_param, type, point_bit_length); key_B = sm2_ec_key_new(ecp); sm2_ec_key_init(key_B, sm2_param_d_B[ecp->type], ecp); memset(&message_data, 0, sizeof(message_data)); sm2_hex2bin((BYTE *)sm2_param_k[ecp->type], message_data.k, ecp->point_byte_length); sm2_bn2bin(key_B->d, message_data.private_key, ecp->point_byte_length); sm2_bn2bin(key_B->P->x, message_data.public_key.x, ecp->point_byte_length); sm2_bn2bin(key_B->P->y, message_data.public_key.y, ecp->point_byte_length); message_data.decrypt = (BYTE *)OPENSSL_malloc(message_data.message_byte_length + 1); memset(message_data.decrypt, 0, message_data.message_byte_length + 1); BIGNUM *P_x; BIGNUM *P_y; //BIGNUM *d; BIGNUM *k; xy_ecpoint *P; xy_ecpoint *xy1; xy_ecpoint *xy2; int pos1; BYTE t; int i; sm2_hash local_C_3; P_x = BN_new(); P_y = BN_new(); k = BN_new(); P = xy_ecpoint_new(ecp); xy1 = xy_ecpoint_new(ecp); xy2 = xy_ecpoint_new(ecp); BN_bin2bn(message_data.public_key.x, ecp->point_byte_length, P_x); BN_bin2bn(message_data.public_key.y, ecp->point_byte_length, P_y); BN_bin2bn(message_data.k, ecp->point_byte_length, k); xy_ecpoint_init_xy(P, P_x, P_y, ecp); xy_ecpoint_mul_bignum(xy1, ecp->G, k, ecp); xy_ecpoint_mul_bignum(xy2, P, k, ecp); char cryptstring[1024]; scanf("%s", cryptstring); / 利用函数sm2_hex2bin将16进制字符串cryptstring转换成二进制流填充到message_data.C里 / / 计算明文长度 message_data.message_byte_length */ message_data.klen_bit = message_data.message_byte_length * 8;(请根据注释补充)

2023-05-26 上传

grant execute on dbms_crypto to system; declare input_string VARCHAR2 (200) := 'Secret Message'; output_string VARCHAR2(2000); encrypted_raw RAW(2000); decrypted_raw RAW(2000); num_key_bytes NUMBER := 256/8; key_bytes_raw RAW(32); encryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; begin DBMS_OUTPUT.PUT_LINE(input_string); key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES(num_key_bytes); encrypted_raw := DBMS_CRYPTO.ENCRYPT ( src => UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8'), typ => encryption_type, key => key_bytes_raw ); decrypted_raw := DBMS_CRYPTO.DECRYPT ( src => encrypted_raw, typ => encryption_type, key => key_bytes_raw ); output_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8'); DBMS_OUTPUT.PUT_LINE(output_string); end; declare l_src_data varchar2(20); l_type pls_integer :=DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) :='0123456789123456'; l_encval raw(2000); CURSOR secret_cursor IS select phonenumber from customer; begin OPEN secret_cursor; LOOP FETCH secret_cursor INTO l_src_data; l_encval :=dbms_crypto.encrypt( src=>utl_i18n.string_to_raw(l_src_data,'AL32UTF8'), typ=>l_type, key=>utl_i18n.string_to_raw(l_key,'AL32UTF8')); DBMS_OUTPUT.PUT_LINE (l_encval); EXIT WHEN secret_cursor%NOTFOUND; END LOOP; CLOSE secret_cursor; end; declare ;_src_data row(100) :=hextoraw("190248129038903853275ijdkvjkad'); l_type pls_integer :=dbms_crypto.encrypt_aes128+ + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) :='0123456789123456'; l_decval raw(200); begin l_decval :=dbms_crypto.decrypt( src=>l_src_data, typ=>l_type, key=>utl_i18n.string_to_raw(l_key,'AL32UTF8')); end; SELECT Price FROM PRODUCT WHERE ProductID = 5;修正这一段代码

2023-05-26 上传