C++简单加密

标签 c++ c encryption

我正在尝试使用相同长度的字符和 key 进行简单加密

#define u8 unsigned char
const int CHARMODMAX = 256;

u8 encrypt(u8 value, u8 key){
    int rawValue = static_cast<int>(value);
    int rawKey = static_cast<int>(key);
    return ((rawValue+rawKey)%CHARMODMAX);
}

u8 decrypt(u8 value, u8 key){
    int rawValue = static_cast<int>(value);
    int rawKey = static_cast<int>(key);
    int rawDiff = rawValue-rawKey;
    return rawDiff >= 0 ? (rawDiff) : (CHARMODMAX + rawDiff);

}

但是,在调用加密和解密后,我似乎失去了精度。任何帮助都会很棒,请注意,自从我使用 C++ 以来已经很长时间了:)

静态转换为 int 是否会降低精度?如果是这样,有没有更好的方法来进行这个简单的数学计算

最佳答案

这是您的函数的简短形式:

u8 encrypt(u8 value, u8 key)
{
   return value + key;
}

u8 decrypt(u8 value, u8 key)
{
   return value - key
}

unsigned char提升为int不会丢失任何东西。促销回导致值(value)截断。所以操作:

(unsigned char)(x + y * 256)

总是等同于:

x & 255 // (or 0xFF)

关于C++简单加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28510502/

相关文章:

c++ - 我如何验证我的程序的文件? C++

c++ - 初始化宽字符数组

C++两个头文件相互包含

java - 如何保护 TextEncryptor 在 spring boot 中使用的密码

java - 通过传递 IV 进行 AES 256 加密

java - 使用 AES-128 加密和解密字符串

c++ - 动态转换在从父级向下转换到子级时失败

c - 如何在 GLFW 中启用帧缓冲区透明度?

objective-c - 语言速度 c vs objective c

c++ - Windows 预缓存 SQLite 问题