我的C++中的基于密码的加密方法工作不正常,我怎么解决呢?

我的C++中的基于密码的加密方法工作不正常,我怎么解决呢?,c++,string,encryption,C++,String,Encryption,我做了这个函数来加密一个10个字符的字符串,其中前4个是小写字母,下2个是大写字母,下2个是数字,最后2个是特殊字符。因此,根据字符在字符串中的位置,假定它会移动其范围内的每个字符,并将加密的替换内容包装回范围的开头。移位等于12+[字符串中字符的索引]。要知道为什么我在最后一个循环中做了这些,你可以在任何一个循环中看到两组不同的特殊角色 现在的问题是,除了第一个字符外,函数正在移动其范围内的每个字符。好的,我没有检查它是否提供了正确的替换。我只是看到替换的字符来自同一个范围,比如小写字母代表小

我做了这个函数来加密一个10个字符的字符串,其中前4个是小写字母,下2个是大写字母,下2个是数字,最后2个是特殊字符。因此,根据字符在字符串中的位置,假定它会移动其范围内的每个字符,并将加密的替换内容包装回范围的开头。移位等于12+[字符串中字符的索引]。要知道为什么我在最后一个循环中做了这些,你可以在任何一个循环中看到两组不同的特殊角色


现在的问题是,除了第一个字符外,函数正在移动其范围内的每个字符。好的,我没有检查它是否提供了正确的替换。我只是看到替换的字符来自同一个范围,比如小写字母代表小写字母,数字代表数字,并假设它对他们正常工作:P第一个替换的字符是一些奇怪的无法识别的字符。我使用了Borland编译器。是编译器吗?是代码吗?

我建议将所有有效字符放入一个字符串中,然后使用%运算符

void encrypt(char *string){
    int i, shift;
    for(i = 0; i < 4; i++){
        shift = 12+i;
        while(((int)string[i]+shift) > 122){
            shift-=26;
        }
        string[i]+=shift;
    }
    for(i = 4; i < 6; i++){
        shift = 12+i;
        while(((int)string[i]+shift) > 90){
            shift-=26;
        }
        string[i]+=shift;
    }
    for(i = 6; i < 8; i++){
       shift = 12+i;
        while(((int)string[i]+shift) > 57){
            shift-=10;
        }
        string[i]+=shift;
    }
    for(i = 8; i < 10; i++){
        shift = 12+i;

        if((((int)string[i])>=33)&&(((int)string[i])<=47)){
            while(((int)string[i]+shift) > 47){
                shift-=15;
            }
        }
        else{
            while(((int)string[i]+shift) > 64){
                shift-=7;
            }
        }
        string[i]+=shift;
    }
}

您必须检查位置值,因为如果有效字符字符串中不存在该字符,则find将返回std::string::npos。

1请尽快提供帮助。所以这不是一条紧急热线。2您曾试图自行解决该问题吗?例如,您是否尝试使用调试器逐步检查代码,以找出代码在何处执行了与预期不同的操作?顺便说一句,如果您很匆忙,请使用调试器。使用调试器比发布到Stackoverflow并等待有人对代码使用调试器要快。提示:模运算。查一下。我建议用相应的字符替换这些常量中的大部分。例如,“z”的值为122。很明显,在这个上下文中,值122表示z。不需要所有这些神奇的数字。查一下凯撒密码。在您进行研究的同时,还可以查看ROT13代码。
const std::string valid_characters = 
     "abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*";
const unsigned int shift_offset = 13;

std::string::size_type position = valid_characters.find(incoming_character);
position = (position + shift_offset) % valid_characters.length();
char result = valid_characters[position];