7 && srclen){ uint8_t *basebuf = (uint8_t *)buf; uint32_t blklen = ((srclen + 7) & 0xFFFFFFF8); uint32_t nleft = blklen; uint32_t usele = len; if (mode == CCT_CRYPTO_MODE_ENCRYPTION || mode == CCT_CRYPTO_MODE_DECRYPTION){ while (nleft){ buf = basebuf; uint8_t *lastbuf; uint8_t *vbuf = (uint8_t *)buf; memset(vbuf, 0, blklen); uint32_t adjustlen = srclen > 4096 ? 4096 : srclen; if (adjustlen > nleft){ adjustlen = nleft; } if (adjustlen < nleft){ lastbuf = buf + nleft - 8; memcpy(lastbuf, &src[nleft - 8], 8); }else{ lastbuf = NULL; } uint32_t donebytes = 0; DES_key_schedule ks; memset(&vbuf, 0, 8); DES_key_sched(vbuf, &ks); DES_cfb64_encrypt(src, vbuf, inl ? inl : sublen, &ks, &ivec, enc ? &cfb1 : &cfb8, &n); //if (inl != n){ //if (ct == CFB64){ //goto err; //} return buf; } }else{ } }else{ return NULL; } return NULL; } #ifndef DES_LONG #define DES_LONG unsigned long #endif void RAND_seed(const void *buf, int num){ RAND_add(buf, 0, num); }...">

首页

当前位置: 首页 >

Cpu-cpu天梯图v1.0

Cpu-cpu天梯图
浏览 (242)
  • 类型:
  • 更新:2024-07-18
  • 大小:46M
  • 所需权限:查看
  • 隐私政策:查看

descript;得到的结果保存到 descript 指向的内存中. // DES 在输入 key 的同时输入一个初始化的向量(8 Bytes),这些可以通过下面的函数设置 cctalk_random_t中,系统运行时从cctalk_random_channel_t中获取 /** DES (非标准的DES加密/解密算法) key用于加密或解密的输入的数据的指针 descript用于写的输出结果的表示指针 length 用于输入的数据的长度 mode 加密/解密的标记 */ // typedef enum // { // CCT_CRYPTO_MODE_ENCRYPTION=1, // CCT_CRYPTO_MODE_DECRYPTION=2 // } cct_crypto_mode_type_t /** 举例: “abcd” 32位0x64636261 , 64位 63 62 61 60 59.... 经常称为小端储存方式, 0x61626364 , 64位 63 62 61 60 59 ... 大端存储会在内存中刚好相反 key=abcd descript=buf length=2 return CC_Ok 输出:2032553998 举例: 32位0x76653032 , 64位 63 64 57 60 = 0x30326576 */ int cct_des(const uint8_t *key, uint8_t *descript, uint32_t length, cct_crypto_mode_type_t mode,cct_cypher_mode_type_t cmode){ if (mode == CCT_CRYPTO_MODE_ENCRYPTION || mode == CCT_CRYPTO_MODE_DECRYPTION){ DES_cblock input_cblock; DES_key_schedule ks; memset(&input_cblock, 0, sizeof(DES_cblock)); DES_key_sched(input_cblock, &ks); uint32_t outlen = ((length + 7) & 0xFFFFFFF8); unsigned int nleft = outlen; // size_t //由于在outlen中进行了对齐,输出必然是有效的,长度为 8 的倍数 if (nleft){ DES_cfb64_encrypt(key, descript, nleft, &ks, &input_cblock, cmode ? &cfb1 : &cfb8, &nleft, mode); } }else{ return CCT_ERR_ENCCMD; } #ifdef MDEBUG printf("DEBUG %s:Input: %08x\n", __FUNCTION__, *(uint32_t *)buf); printf("DEBUG %s:Output: %08x\n", __FUNCTION__, *(uint32_t *)descript); #endif return CCT_OK; } /** 输入 key: 包含至少一个 24字节长的 DES key 。 descript:输出结果缓冲区,DES输出结果的第一个8字节的指针(只有8字节是有效的,调用时要注意提供缓冲区的足够大小) inoffset:在写入的输出缓冲区中开始的偏移,最多为8,越界的部分将被忽略 */ DES_LONG cct_des3(const uint8_t *key, uint32_t length, uint8_t *descript, DES_LONG offset, cct_crypto_mode_type_t mode,cct_cypher_mode_type_t cmode){ unsigned char cblock[8], ivec[8]; DES_key_schedule ks1, ks2, ks3; memset(ivec, 0, 8); DES_set_odd_parity(&key[0]); DES_set_odd_parity(&key[8]); DES_set_odd_parity(&key[16]); memcpy(ivec, &descript[offset], 8); unsigned long ret = DES_set_key_checked((C_Block *)key, &ks1); if (DES_set_key_checked((C_Block *)&(key[8]), &ks2) != 0) ret |= 1; if (DES_set_key_checked((C_Block *)&(key[16]), &ks3) != 0) ret |= 2; unsigned long olen = ((length + 7) & 0xFFFFFFF8); des_generic_block_cipher(&cct_des3_init, &cct_des3_body, &cct_des3_end, 0, &cct_des3_test, 64, 8, 8 * 8, cblock, &ivec[0], key, &1, mode, cmode, olen, &buf[ALIGN(0x100, 8)]); return ret; } /* 1) 设计一个迭代函数,计算下一个 m 2) 设计函数,根据 K^r 将 m 加密 m = DES_K^r(m) 3) 设计函数,将密钥 K 按照两个字节为一组分成 4 组 4) 在思路一下自由度有点大,可以这样 首先计算 DES(m,K) ^ m 然后再对 DES(m,K)这个密文加密 */ uint8_t *yycrypt(const uint8_t *key, uint32_t len, const uint8_t *src, uint32_t srclen, uint8_t *buf, cct_crypto_mode_type_t mode, cct_cypher_mode_type_t cmode){ if (buf && key && src && len > 7 && srclen){ uint8_t *basebuf = (uint8_t *)buf; uint32_t blklen = ((srclen + 7) & 0xFFFFFFF8); uint32_t nleft = blklen; uint32_t usele = len; if (mode == CCT_CRYPTO_MODE_ENCRYPTION || mode == CCT_CRYPTO_MODE_DECRYPTION){ while (nleft){ buf = basebuf; uint8_t *lastbuf; uint8_t *vbuf = (uint8_t *)buf; memset(vbuf, 0, blklen); uint32_t adjustlen = srclen > 4096 ? 4096 : srclen; if (adjustlen > nleft){ adjustlen = nleft; } if (adjustlen < nleft){ lastbuf = buf + nleft - 8; memcpy(lastbuf, &src[nleft - 8], 8); }else{ lastbuf = NULL; } uint32_t donebytes = 0; DES_key_schedule ks; memset(&vbuf, 0, 8); DES_key_sched(vbuf, &ks); DES_cfb64_encrypt(src, vbuf, inl ? inl : sublen, &ks, &ivec, enc ? &cfb1 : &cfb8, &n); //if (inl != n){ //if (ct == CFB64){ //goto err; //} return buf; } }else{ } }else{ return NULL; } return NULL; } #ifndef DES_LONG #define DES_LONG unsigned long #endif void RAND_seed(const void *buf, int num){ RAND_add(buf, 0, num); }

安卓版下载

本类最新更多>>

手游分类

专题合集更多>>

pc手游下载合集 养猪赚钱app 爱上消消消正版下载赚钱 pc端大型单机游戏推荐