我在做一個簡單的C++聊天,我想加密用一個簡單的做代碼的消息。 所以我認爲它會像chars a-x,然後它會替換它們,例如-11。 因此,這將需要分割字符串轉換成字符,然後返回字符串
- 斯普利特消息爲字符
- 更改字符數爲
- 將它們放回正確的順序。
那麼有誰知道該怎麼做? 謝謝:)
我在做一個簡單的C++聊天,我想加密用一個簡單的做代碼的消息。 所以我認爲它會像chars a-x,然後它會替換它們,例如-11。 因此,這將需要分割字符串轉換成字符,然後返回字符串
那麼有誰知道該怎麼做? 謝謝:)
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;
在C++中的字符串已經是字符數組,除非你的聊天程序使用Unicode或其它字符集編碼。在這種情況下,事情變得複雜得多,因爲字符串可能是網絡中新鮮的字節數組(不是字符),或者它可能是一組經過解碼的寬字符(一個wstring)。
但假定您有一個8位字符的ASCII字符串或32位字符的解碼寬字符串,步驟1和2非常容易。第一步是爲你完成的。您應該可以使用數組索引訪問每個字符,如mystring[1]
,mystring[2]
。步驟2很容易,因爲字符是號碼。只需要對角色值進行數學計算。你可以加,減,乘:無論你喜歡什麼。請注意,8位字符的值可能在-128到+127之間。
字符的順序串在不改變。所以把它們留在原地。
如果您的編碼方法改變了字符串的長度,那麼您將需要創建一個新的字符串副本。做這件事的最好方法就是在你做數學的時候。在C++中,使用push_back
方法將新字符添加到新字符串的「後面」。
一個簡單的方法是運行一個循環並在每次迭代中處理字符。
#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;
}
搜索在互聯網上執行ROT加密的實現,在你的情況下它將是ROT-11。 ROT代表「旋轉」,因爲'''' - 11'會給你一個字符超大的字母。相反,該值應該等於「z'-10」。 ROT-13最常見,因爲加密與解密相同。 – 2012-03-28 19:35:52