Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 持久字节输出计数器C++;_C++_Encryption_Base64 - Fatal编程技术网

C++ 持久字节输出计数器C++;

C++ 持久字节输出计数器C++;,c++,encryption,base64,C++,Encryption,Base64,我正在做一个项目,在这个项目中,我需要跟踪软件输出的字节数 软件会偶尔打开或关闭,因此我必须实现一种存储输出字节数的方法,以使管理员或其他用户无法简单地打开文件并更改输出字节数。 实现这一点的最佳方式是什么 另外,我不能使用任何库(例如:boost)。这里是一个使用 #包括 #包括 无效加密(uint32\u t*v、uint32\u t*k){ uint32_t v0=v[0],v1=v[1],总和=0,i;/*设置*/ uint32_t delta=0x9e3779b9;/*一个键调度常量*

我正在做一个项目,在这个项目中,我需要跟踪软件输出的字节数

软件会偶尔打开或关闭,因此我必须实现一种存储输出字节数的方法,以使管理员或其他用户无法简单地打开文件并更改输出字节数。

实现这一点的最佳方式是什么


另外,我不能使用任何库(例如:boost)。

这里是一个使用

#包括
#包括
无效加密(uint32\u t*v、uint32\u t*k){
uint32_t v0=v[0],v1=v[1],总和=0,i;/*设置*/
uint32_t delta=0x9e3779b9;/*一个键调度常量*/
uint32_t k0=k[0],k1=k[1],k2=k[2],k3=k[3];/*缓存密钥*/
对于(i=0;i<32;i++){/*基本循环开始*/
总和+=增量;
v0+=((v1>5)+k1);
v1+=((v0>5)+k3);
}/*结束周期*/
v[0]=v0;v[1]=v1;
}
无效解密(uint32_t*v,uint32_t*k){
uint32_t v0=v[0],v1=v[1],总和=0xC6EF3720,i;/*设置*/
uint32_t delta=0x9e3779b9;/*一个键调度常量*/
uint32_t k0=k[0],k1=k[1],k2=k[2],k3=k[3];/*缓存密钥*/
对于(i=0;i5)+k3);
v0-=((v1>5)+k1);
总和-=增量;
}/*结束周期*/
v[0]=v0;v[1]=v1;
}
int main()
{
uint32_t k[4]={123456789,10};//键
uint32_t v[2]={1000000,1000000};//数据
//保存到文件中
ofs流的std::of(“save.dat”,std::ios::binary);
加密(v,k);
ofs v2[1])
{

std::cout下面是一个使用

#包括
#包括
无效加密(uint32\u t*v、uint32\u t*k){
uint32_t v0=v[0],v1=v[1],总和=0,i;/*设置*/
uint32_t delta=0x9e3779b9;/*一个键调度常量*/
uint32_t k0=k[0],k1=k[1],k2=k[2],k3=k[3];/*缓存密钥*/
对于(i=0;i<32;i++){/*基本循环开始*/
总和+=增量;
v0+=((v1>5)+k1);
v1+=((v0>5)+k3);
}/*结束周期*/
v[0]=v0;v[1]=v1;
}
无效解密(uint32_t*v,uint32_t*k){
uint32_t v0=v[0],v1=v[1],总和=0xC6EF3720,i;/*设置*/
uint32_t delta=0x9e3779b9;/*一个键调度常量*/
uint32_t k0=k[0],k1=k[1],k2=k[2],k3=k[3];/*缓存密钥*/
对于(i=0;i5)+k3);
v0-=((v1>5)+k1);
总和-=增量;
}/*结束周期*/
v[0]=v0;v[1]=v1;
}
int main()
{
uint32_t k[4]={123456789,10};//键
uint32_t v[2]={1000000,1000000};//数据
//保存到文件中
ofs流的std::of(“save.dat”,std::ios::binary);
加密(v,k);
ofs v2[1])
{

std::请给我们一个更好的“软件发出的字节数”定义。您想登录stdout?还是跟踪分配/解除分配?…管理员或…“根据定义,本地管理员是上帝,这是不可能的。您需要将数据发送到您(或可信代表)使用的远程计算机拥有完全的控制权。有几十种实现持久性的方法:文件、数据库、本地服务器、云服务器等。选择一种,编写一个程序,然后我们会为您提供一些帮助。您想让某人改变/删除计数有多难?不可能是不可能的。这看起来很简单,刚刚测试过,可以正常工作很好。您可能需要在这里使用两个不同的密钥对您的值进行加密,并将两个结果存储在文件中,然后如果在描述时修改了值,则这些值将不匹配。请为我们提供“软件输出的字节”的更好定义。您想记录stdout吗?还是跟踪分配/解除分配?“…管理员或…”根据定义,本地管理员不可能是上帝。您需要将数据发送到您(或受信任的代表)使用的远程计算机拥有完全的控制权。有几十种实现持久性的方法:文件、数据库、本地服务器、云服务器等。选择一种,编写一个程序,然后我们会为您提供一些帮助。您想让某人改变/删除计数有多难?不可能是不可能的。这看起来很简单,刚刚测试过,可以正常工作很好。您可能需要在这里使用两个不同的密钥加密您的值,并将这两个结果存储在文件中,然后,如果修改,则在描述时,这些值将不匹配
#include <iostream>
#include <fstream>

void encrypt(uint32_t* v, uint32_t* k) {
    uint32_t v0 = v[0], v1 = v[1], sum = 0, i;           /* set up */
    uint32_t delta = 0x9e3779b9;                     /* a key schedule constant */
    uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3];   /* cache key */
    for (i = 0; i < 32; i++) {                       /* basic cycle start */
        sum += delta;
        v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
        v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
    }                                              /* end cycle */
    v[0] = v0; v[1] = v1;
}

void decrypt(uint32_t* v, uint32_t* k) {
    uint32_t v0 = v[0], v1 = v[1], sum = 0xC6EF3720, i;  /* set up */
    uint32_t delta = 0x9e3779b9;                     /* a key schedule constant */
    uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3];   /* cache key */
    for (i = 0; i<32; i++) {                         /* basic cycle start */
        v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
        v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
        sum -= delta;
    }                                              /* end cycle */
    v[0] = v0; v[1] = v1;
}

int main()
{
    uint32_t k[4] = { 123,456,789,10 }; // key
    uint32_t v[2] = { 1000000, 1000000 }; // data


    // save into file
    std::ofstream ofs("save.dat", std::ios::binary);
    encrypt(v, k);
    ofs << v[0] << " " << v[1] << std::endl;



    // read from file
    std::ifstream ifs("save.dat", std::ios::binary);
    uint32_t v2[2];

    if (ifs >> v2[0] >> v2[1])
    {
        std::cout << "Filedata: " << v2[0] << " " << v2[1] << std::endl;

        decrypt(v2, k);

        if (v2[0] == v2[1])
            std::cout << "Decrypted: " << v2[0] << std::endl;
        else
            std::cout << "Data was tampered with!" << std::endl;
    }
}