2012-03-28 168 views
1

我在做一個簡單的C++聊天,我想加密用一個簡單的做代碼的消息。 所以我認爲它會像chars a-x,然後它會替換它們,例如-11。 因此,這將需要分割字符串轉換成字符,然後返回字符串

  1. 斯普利特消息爲字符
  2. 更改字符數爲
  3. 將它們放回正確的順序。

那麼有誰知道該怎麼做? 謝謝:)

+0

搜索在互聯網上執行ROT加密的實現,在你的情況下它將是ROT-11。 ROT代表「旋轉」,因爲'''' - 11'會給你一個字符超大的字母。相反,該值應該等於「z'-10」。 ROT-13最常見,因爲加密與解密相同。 – 2012-03-28 19:35:52

回答

1

std::string將存儲任意值爲char,並讓您可以輕鬆訪問個別字符。但是,對於加密,您可能更喜歡使用unsigned char,這很容易 - std::string只是std::basic_string<char>的typedef,但std::basic_string<unsigned char>非常易於管理。

這聽起來像你想要的是一個Ceaser密碼的順序,儘管如果你只是「加密」所有東西,而不僅僅是字母,這是最容易的。

std::basic_string<unsigned char> s; 

for (int i=0; i<s.length(); i++) 
    s[i] += 5; 

再到「解密」你只是做相反:

for (int i=0; i<s.length; i++) 
    s[i] -= 5; 
0

在C++中的字符串已經是字符數組,除非你的聊天程序使用Unicode或其它字符集編碼。在這種情況下,事情變得複雜得多,因爲字符串可能是網絡中新鮮的字節數組(不是字符),或者它可能是一組經過解碼的寬字符(一個wstring)。

但假定您有一個8位字符的ASCII字符串或32位字符的解碼寬字符串,步驟1和2非常容易。第一步是爲你完成的。您應該可以使用數組索引訪問每個字符,如mystring[1],mystring[2]。步驟2很容易,因爲字符號碼。只需要對角色值進行數學計算。你可以加,減,乘:無論你喜歡什麼。請注意,8位字符的值可能在-128到+127之間。

字符的順序串在不改變。所以把它們留在原地。

如果您的編碼方法改變了字符串的長度,那麼您將需要創建一個新的字符串副本。做這件事的最好方法就是在你做數學的時候。在C++中,使用push_back方法將新字符添加到新字符串的「後面」。

2

一個簡單的方法是運行一個循環並在每次迭代中處理字符。

#include <iostream> 
#include <string.h> 

using namespace std;  

int main() {  

int num = 3; //your choice for encryption 
int len = 30; //length of string 
char * str = new char[len]; 
cin>>str; 

//encrypt 
for (int i = 0; i < strlen(str);i++) 
{ 
    str[i] += num; 
} 

cout<<str<<endl; 
return 0; 
}