Forum: Encryptkod (Nybörjar kritik)

Forum huvudsida -> Programmering -> Encryptkod (Nybörjar kritik)

Sidor: 1

Till botten

arkof 17:52 - 16:e Mars 2010 | Post #1
Medlem
Inlägg: 8


Skicka PM
Hej.
Har läst nybörjar kursen här på sidan.
Slängde ihop en encrypt kod, skulle vilja ha lite kritik på den,
tex vad jag gjort fel / onödigt / dum / bra / smart osv.
Vill lära mig därför frågar jag.

Ganska lång kod, hoppas ni orkar läsa:

  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. void enkrypt_pw();
  8. void dekrypt_pw();
  9.  
  10.  
  11.  
  12. void enkrypt_pw()
  13. {
  14.  
  15. string text; // string för de nya lösenordet.
  16.  
  17. cout << "Enter a password(Max 20 letters, no space): ";
  18. cin >> text;
  19.  
  20. for ( int i = 0; i <= text.length(); i++)
  21. {
  22. double e = (i+5)*3;
  23. text[i] +=e;
  24. // kryptonerar texten
  25. }
  26.  
  27.  
  28.  
  29. ofstream writeFile;
  30. writeFile.open("cng.drl");
  31. // öppnar filen cng.drl där vi spara
  32. // de kryptonerade lösenordet.
  33. if (!writeFile)
  34. {
  35. cout << "Error 1";
  36. }
  37.  
  38. else
  39. {
  40. writeFile << text.length()*3.14/1337 << endl;
  41.  
  42. for (int i = 0; i <= text.length(); i++)
  43. {
  44. writeFile << text[i] << endl;
  45. }
  46.  
  47. writeFile.close();
  48. cout << "Done.nn";
  49. }
  50.  
  51. return;
  52. }
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60. void dekrypt_pw()
  61. {
  62.  
  63. char text[20];
  64. double pw_length;
  65. double fLine;
  66.  
  67. ifstream readFile;
  68.  
  69. if (!readFile)
  70. {
  71. cout << "Error 1.";
  72. }
  73.  
  74. else
  75. {
  76. readFile.open("cng.drl");
  77. readFile >> fLine;
  78. // tar reda på vad de står i första raden.
  79.  
  80. pw_length = fLine/3.14*1337;
  81. // räknar ut hur många rader programmet ska läsa ut.
  82.  
  83. for ( int i = 0; i <= pw_length-1; i++)
  84. // kör en loop, dekryptar lösenordet och sedan skriver ut de.
  85. {
  86. readFile >> text[i];
  87. double e = (i+5)*3;
  88. text[i] -= e;
  89. cout << text[i];
  90. }
  91.  
  92. cout << "Done";
  93. }
  94. return;
  95.  
  96. }
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105. int main()
  106. {
  107.  
  108. char menyc; // meny val.
  109. cout << "Meny:n1.Enter a new passwordn2.Decrypt old passowrdn";
  110. cin >> menyc;
  111.  
  112. switch (menyc)
  113. {
  114. case '1':
  115. // om användaren väljer 1 så skickas den till enkrypt password.
  116. system("cls");
  117. enkrypt_pw();
  118. break;
  119. case '2':
  120. // om användaren väljer 2 så skickas den till dekrypt password.
  121. system("cls");
  122. dekrypt_pw();
  123. break;
  124. default:
  125. // om annat så skrivs Wrong ut och programmet stängs ner.
  126. cout << "Wrong";
  127. }
  128.  
  129.  
  130. system("pause");
  131. return 0;
  132. }


Ett exempel:

  1. Meny:
  2. 1. Enter a new password
  3. 2. Decrypt old password
  4.  
  5. val: 1
  6.  
  7. Enter a password:
  8. blinkenlights
  9.  
  10.  
  11. om ja nu öppnar filen som heter cng.drl i tex notepad
  12. står de:
  13.  
  14. 0.030531
  15. q
  16. ~
  17. ~
  18. ƒ
  19. 
  20. 
  21. 
  22. ¤
  23. ¦
  24. 6
  25.  
  26. ganska svårt att knäcka va?





martin310 18:28 - 16:e Mars 2010 | Post #2
Medlem
Inlägg: 132


Skicka PM
Kan inte mycket om krypterning men om du använder ett lönsenord till encryptionen och gör om texten till bytes och sedan komprimerar den skulle den blivit ännu svårare att knäcka.

-------------------------

Hjälp jorden med Granola, det är gratis och funkar på både Windows och Linux, och försämrar inte datorns prestandad!





achnorr 21:07 - 16:e Mars 2010 | Post #3
Medlem
Inlägg: 82


Skicka PM
  1. for ( int i = 0; i <= text.length(); i++)
  2. {
  3. double e = (i+5)*3;
  4. text[i] +=e;
  5. // kryptonerar texten
  6. }

du går utanför strängen med ett tecken borde vara
  1. for ( int i = 0; i < text.length(); i++)
eftersom den indexerar från 0.



  1. writeFile << text.length()*3.14/1337 << endl;

ganska onödigt att ens göra en så simpel kryptering på stränglängden.



  1. for (int i = 0; i <= text.length(); i++)
  2. {
  3. writeFile << text[i] << endl;
  4. }

utanför strängen igen + att det tar upp onödigt med utrymme att skriva ut ny rad efter varje tecken. Det underlättar även att urskilja varje tecken om de följs av ny rad = lättare att "knäcka"


  1. ifstream readFile;
  2.  
  3. if (!readFile)
  4. {
  5. cout << "Error 1.";
  6. }
  7.  
  8. else
  9. {
  10. readFile.open("cng.drl");

antar att du vill kolla om filen gick att öppna eller ej och då måste readFile.open("cng.drl"); ligga före if (!readFile) dvs.
  1. ifstream readFile( "cng.txt", ios::in );
  2.  
  3. if (!readFile)
  4. cout << "Error 1.";




  1. for ( int i = 0; i <= pw_length-1; i++)
  2. // kör en loop, dekryptar lösenordet och sedan skriver ut de.
  3. {
  4. readFile >> text[i];
  5. double e = (i+5)*3;
  6. text[i] -= e;
  7. cout << text[i];
  8. }

utanför igen men det rättar du till med en random -1Smiley?
och det är inte speciellt svårt att "knäcka" denna form av kryptering. översätter du varje tecken i filen till motsvarande heltal så ser du ganska direkt ett mönster.

-------------------------
Ohhoo*



martin310 11:16 - 17:e Mars 2010 | Post #4
Medlem
Inlägg: 132


Skicka PM
Jag gjorde denna nu i morse (C# med froms):

  1. private string Encrypt(string code, string toEncrypt, int number)
  2. {
  3. try
  4. {
  5. int i;
  6.  
  7. int runs = number;
  8. for (i = 0; i < runs; i++)
  9. code = sha512encrypt(code);
  10.  
  11. byte[] Code = Encoding.UTF8.GetBytes(code);
  12.  
  13. StringBuilder Output = new StringBuilder();
  14.  
  15. i = 0;
  16. foreach (char Char in toEncrypt)
  17. {
  18. char[] Char2 = new char[1];
  19. Char2[0] = Char;
  20.  
  21. byte[] Byte = Encoding.UTF8.GetBytes(Char2);
  22. byte Byte2 = Byte[0];
  23.  
  24. if (Byte2 + Code[i] > byte.MaxValue)
  25. Byte2 = (byte)(byte.MinValue + ((Byte2 + Code[i]) - byte.MaxValue));
  26. else
  27. Byte2 = (byte)(Byte2 + Code[i]);
  28.  
  29. Output.AppendLine("" + Byte2);
  30.  
  31. i++;
  32. if (i > Code.Length)
  33. i = 0;
  34. }
  35.  
  36. return Output.ToString();
  37. }
  38. catch (Exception ex)
  39. { MessageBox.Show(ex.Message, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); }
  40. return "";
  41. }
  42.  
  43. private string Decrypt(string code, string filename, int number)
  44. {
  45. try
  46. {
  47. int i;
  48.  
  49. int runs = number;
  50. for (i = 0; i < runs; i++)
  51. code = sha512encrypt(code);
  52.  
  53. byte[] Code = Encoding.UTF8.GetBytes(code);
  54.  
  55. StringBuilder Output = new StringBuilder();
  56.  
  57. List<byte> Bytes = new List<byte>();
  58. StreamReader sr = new StreamReader(filename);
  59.  
  60. i = 0;
  61. while (!sr.EndOfStream)
  62. {
  63. byte Byte = Convert.ToByte(sr.ReadLine());
  64.  
  65. byte[] Byte1 = new byte[1];
  66. if (Byte - Code[i] < byte.MinValue)
  67. Byte1[0] = (byte)(byte.MaxValue - ((Byte - Code[i]) - byte.MinValue));
  68. else
  69. Byte1[0] = (byte)(Byte - Code[i]);
  70.  
  71. Output.Append(Encoding.UTF8.GetString(Byte1));
  72.  
  73. i++;
  74. if (i > Code.Length)
  75. i = 0;
  76. }
  77.  
  78. return Output.ToString();
  79. }
  80. catch (Exception ex)
  81. { MessageBox.Show(ex.Message, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); }
  82. return "";
  83. }
  84.  
  85. private static string sha512encrypt(string phrase)
  86. {
  87. UTF8Encoding encoder = new UTF8Encoding();
  88. SHA512Managed sha512hasher = new SHA512Managed();
  89. byte[] hashedDataBytes = sha512hasher.ComputeHash(encoder.GetBytes(phrase));
  90. return byteArrayToString(hashedDataBytes);
  91. }
  92.  
  93. public static string byteArrayToString(byte[] inputArray)
  94. {
  95. StringBuilder output = new StringBuilder("");
  96. for (int i = 0; i < inputArray.Length; i++)
  97. {
  98. output.Append(inputArray[i].ToString("X2"));
  99. }
  100. return output.ToString();
  101. }
  102.  
  103. private void CodeEncrypt_Click(object sender, EventArgs e)
  104. {
  105. int number = 0;
  106. byte[] Byte = Encoding.UTF8.GetBytes(Number.Text);
  107. foreach (byte number2 in Byte)
  108. number += (int)number2;
  109.  
  110. string output = Encrypt(Code.Text, ToEncrypt.Text, number);
  111. Output.Text = output;
  112.  
  113. DialogResult MessageBoxResult = MessageBox.Show("Do you want to save the encrypted string?", "Save?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
  114.  
  115. if (MessageBoxResult == DialogResult.Yes)
  116. {
  117. DialogResult SaveDialogResult = saveFileDialog.ShowDialog();
  118. if (SaveDialogResult == DialogResult.OK)
  119. {
  120. StreamWriter sw = new StreamWriter(saveFileDialog.FileName);
  121. sw.Write(output);
  122. sw.Close();
  123. }
  124. }
  125. }
  126.  
  127. private void FileDecrypt_Click(object sender, EventArgs e)
  128. {
  129. DialogResult OpenDialogResult = openFileDialog.ShowDialog();
  130.  
  131. if (OpenDialogResult == DialogResult.OK)
  132. {
  133. int number = 0;
  134. byte[] Byte = Encoding.UTF8.GetBytes(Number.Text);
  135. foreach (byte number2 in Byte)
  136. number += (int)number2;
  137.  
  138. string output = Decrypt(Code.Text, openFileDialog.FileName, number);
  139. Output.Text = output;
  140.  
  141. DialogResult MessageBoxResult = MessageBox.Show("Do you want to save the decrypted string?", "Save?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
  142.  
  143. if (MessageBoxResult == DialogResult.Yes)
  144. {
  145. DialogResult SaveDialogResult = saveFileDialog.ShowDialog();
  146. if (SaveDialogResult == DialogResult.OK)
  147. {
  148. StreamWriter sw = new StreamWriter(saveFileDialog.FileName);
  149. sw.Write(output);
  150. sw.Close();
  151. }
  152. }
  153. }
  154. }


Koden för SHA512 är inte min.

Den tar en sträng från användaren där den har ett lösenord.
Och sedan tar den ett "nummer" eller rättare sagt: en sträng som den gör om till ett nummer.

-------------------------

Hjälp jorden med Granola, det är gratis och funkar på både Windows och Linux, och försämrar inte datorns prestandad!





Sidor: 1

Forum huvudsida -> Programmering -> Encryptkod (Nybörjar kritik)
Atom feed

Du får inte posta i den här tråden | Till toppen