trDataTolog 数据更新为密文

添加pack_data函数,密文覆盖明文
This commit is contained in:
CSSC-WORK\murmur 2023-11-09 17:12:57 +08:00
parent f57ebee26d
commit b65fb0a66a
4 changed files with 117 additions and 11 deletions

View File

@ -453,7 +453,7 @@ static void upSendFile_thread_entry(void *parameter)
rt_sem_release(okTosend);
return;
}
if (getFileSize(f->fname) > scfg.maxSizePerFile+200) {//部分demo数据体积>>1k
if (getFileSize(f->fname) > scfg.maxSizePerFile+500) {//部分demo数据体积>>1k
LOG_W("file '%s' is too large to send.",f->fname);
clearFileToSend(f->fname);
rt_sem_release(okTosend);
@ -461,10 +461,12 @@ static void upSendFile_thread_entry(void *parameter)
}
LOG_D("ready to send '%s---%d'",f->fname,f->index);
uint8_t len = pack_File(f->fname, 0, d, s);
for (size_t i = 0; i < len; i++) {
// uint8_t len = pack_File(f->fname, 0, d, s);
uint8_t len = pack_data(f->fname, 0, d, s);
// for (size_t i = 0; i < len; i++) {
// LOG_HEX("msg",27,d[i],s[i]);
}
// }
// list_thread();
if (len)
{
@ -544,6 +546,7 @@ void getAndSendFile()
getLstCacheFileName(fnow);
manualAaddlst(fnow);
updateCacheFileName();
cryptCdata(fnow);//密文覆盖明文
rt_thread_mdelay(1000);

View File

@ -189,7 +189,7 @@ void aes_file(const char *fin, const char *fout)
}
write(fd_out, outbuffer, len);
LOG_I("AESed to %s done. File size from %d bytes to %d.\n", fout,file_size, len);
// LOG_I("AESed to %s done. File size from %d bytes to %d.\n", fout,file_size, len);
// goto _exit;
@ -251,7 +251,7 @@ void deaes_file(const char *fin, const char *fout)
lseek(fd_in, 0, SEEK_SET);
buffer = (rt_uint8_t *) malloc(file_size);
outbuffer = (rt_uint8_t *) malloc(file_size + 16); //加密后最大大16字节
outbuffer = (rt_uint8_t *) malloc(file_size); //加密后最大大16字节
if (!buffer || !outbuffer)
{
LOG_E("No memory for AES!\n");

View File

@ -70,6 +70,9 @@ int trDataTolog(uint8_t *din, size_t len, uint8_t isTx)
strcat(log,isTx?" [T]: ":" [R]: ");
write(fd, log, strlen(log));
len = cryp_data(din, len, din);//加密数据
bytes2str(din, len, 16, " ", din);
len = strlen(din);
int rst = write(fd, din, len);
if (rst != len)
{
@ -196,17 +199,17 @@ void upSend_thread_entry(void* parameter)
time2Str(fin);
strcat(fin,".bin");
packInit(&cfg, fin, 0); //写入配置
#define PACK_SIZE 130
cfg.fcurpiece[0] = 1;
cfg.fallpiece[0] = msg->len/PACK_SIZE+1;
cfg.fallpiece[0] = msg->len/FRAME_DATA_LEN_MAX+1;
#ifdef CRYPT_BEFRE_PACK
//crypt before pack
//更改后3S单帧数据升为200+超出TT最大单包数据容量须分包
for (size_t var = 0; var < msg->len; var=var+PACK_SIZE) {
cfg.fcurpiece[0] = var/PACK_SIZE+1;
for (size_t var = 0; var < msg->len; var=var+FRAME_DATA_LEN_MAX) {
cfg.fcurpiece[0] = var/FRAME_DATA_LEN_MAX+1;
static uint8_t tmp[200];
uint8_t tlen = (msg->len-var)>PACK_SIZE?PACK_SIZE:(msg->len-var);
uint8_t tlen = (msg->len-var)>FRAME_DATA_LEN_MAX?FRAME_DATA_LEN_MAX:(msg->len-var);
uint8_t len = cryptSingleMsg(msg->data+var, tlen, tmp);
// LOG_HEX("2",16,msg->data+var,tlen);
@ -1523,6 +1526,7 @@ int cacheDataToFile(uint8_t *din, size_t len)
if (size > scfg.maxSizePerFile) {
updateCacheFileName();//更新文件名,置于线程前避免冲突
cryptCdata(f);//密文覆盖明文
postFileInfo(f,0);//加入待发列表
}
rst=RT_EOK;
@ -1898,6 +1902,11 @@ size_t decryptCdata(const char *fin, uint8_t *dout)
rt_uint8_t *buffer = RT_NULL;
buffer = rt_malloc(file_size);
if (!buffer)
{
LOG_E("No memory for read cdata!\n");
return RT_ERROR;
}
read(fd, buffer, file_size);
close(fd);

View File

@ -353,6 +353,100 @@ rt_uint8_t pack_File(const char *fin, rt_uint8_t flag, const rt_uint8_t (*dout)[
}
/**
* 2023.11.08
* @param fin
* @param flag
* @param dout
* @param arrLen
* @return
*/
rt_uint8_t pack_data(const char *fin, rt_uint8_t flag, const rt_uint8_t (*dout)[200], rt_uint8_t *arrLen)
{
static MSG cfg;
rt_memset(&cfg, 0, sizeof(MSG)); // 分配空间
rt_uint8_t rst = packInit(&cfg, fin, flag);
if (rst != RT_EOK)
{
return 0;
}
uint8_t decryptData[2048];
size_t file_size = decryptCdata(fin, decryptData);
if (!file_size) {
LOG_E("failed to decrypt");
return 0;
}
size_t flen = 150; // 每包数据初始长度,最大不超过 FRAME_DATA_LEN_MAX
// 粗略调整每包大小
if (file_size > (size_t) FRAME_DATA_LEN_MAX)
{
while ((file_size % flen) < (flen / 1.2) && flen < FRAME_DATA_LEN_MAX) // 阈值约83%
{
flen += 1;
}
if ((file_size % flen) < (flen / 1.2))
{ // 到达限制仍不符合要求
flen = 150;
while ((file_size % flen) < (flen / 2.5) && flen < FRAME_DATA_LEN_MAX) // 调整阈值为40%
{
flen += 1;
}
}
}
else
{
flen = file_size;
}
LOG_E("p=%d",flen);
//延用算法,用特定大小依次读取数据,弃用一次性全部读入
uint8_t row = (file_size / flen) + (file_size % flen > 0 ? 1 : 0);
cfg.fallpiece[0] = row;
LOG_E("--------row=%d,%d",row,cfg.fallpiece[0]);
uint8_t block_size = 0;
rt_uint8_t *buffer = RT_NULL;
buffer = (rt_uint8_t *) rt_malloc(flen);
if (buffer == RT_NULL)
{
LOG_E("No memory for read %s.", fin);
return 0;
}
for (size_t i = 0; i < file_size; i += flen)
{
if ((file_size - i) < flen)
{
block_size = file_size - i;
}
else
{
block_size = flen;
}
rt_memset(buffer, 0x00, flen);
rt_memcpy(buffer, decryptData, block_size);
uint8_t index = (i / flen);
cfg.fcurpiece[0] = index + 1;
//crypt before pack
static uint8_t tmp[200];
uint8_t len = cryptSingleMsg(buffer, block_size, tmp);
uint8_t col = packMsg(&cfg, tmp, len, dout[index]);
arrLen[index] = col;
}
if (buffer != RT_NULL)
{
rt_free(buffer);
}
LOG_E("row=%d,%d",row,cfg.fallpiece[0]);
return row;//cfg.fallpiece[0];
}
/**
*
* @param parameter "0"