נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: אלגוריתם בשפת ++C להצפנה בשימוש מפתח כפול

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
Werewolf
משתמש מתחיל
משתמש מתחיל
סמל אישי

הצטרף / הצטרפה: 25 April 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 21
נשלח בתאריך: 25 April 2006 בשעה 17:46 | IP רשוּם
ציטוט Werewolf

אני מקווה שלכמה אנשים פה זה לא ג'יבריש. ואם זה כן, אני ממליץ על הספר המדהים של סיימון סינג (מחבר "המשפט האחרון של פרמה"), "סודות ההצפנה".

אני מאוד, מאוד, מאוד אבל מאוד מתחיל בשפת ++C, ולפני הרבה זמן התעסקתי עם C אבל אני כבר לא זוכר כלום. למען האמת התחלתי ללמוד את שפת ++C רק לפני כשעה. אז אני יודע שזה דבר גדול עליי, אבל אני רוצה להתחיל לחקור את הנושא ולבסוף ליישם אלגוריתם הצפנה משלי ב++C.

אם מישהו יודע כיצד להצפין בעזרת מפתח כפול, אני אהיה אסיר תודה אם יכתוב תוכנה ב++C שתצפין טקסט רגיל על פי מפתח כפול וסדר מפתחות אשר נכתב באינפוט ע"י המשתמש. עשיתי דבר כזה אבל לא ב++C - והחלטתי שהגיע הזמן שאעבור למשהו רציני יותר (ואני שמח שמצאתי את UnderWarrior).

אני אחקור את הקוד, אנסה להבין אותו (מן הסתם יהיו לי שאלות) ואז אני אנסה לחקות אותו ע"י כתיבת קוד אשר מצפין טקסט במפתח יחיד (כי כפי שאמרתי, אני מתחיל). יש לי אלגוריתם משלי להצפנה חדשה, אבל אני לא יודע ליישם אותה בעזרת השפה. לכן אני צריך להתחיל ללמוד ברצינות את השפה, כי הרי אין קריפטוגרף שלא יודע שפה כמו C או ++C.

אם אף אחד לא יבין על מה אני מדבר (ואני בספק שזה יקרה) אני אסביר את עיקרון השימוש במפתח כפול... אבל אני בטוח שיש פה כמה חבר'ה שמבינים בהצפנה.

תודה מראש!



__________________
Life's a game. Learn how to play, and then learn how to cheat.
חזרה לתחילת העמוד הצג את כרטיס החבר של Werewolf חפש הודעות אחרות של Werewolf
 
Werewolf
משתמש מתחיל
משתמש מתחיל
סמל אישי

הצטרף / הצטרפה: 25 April 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 21
נשלח בתאריך: 26 April 2006 בשעה 18:46 | IP רשוּם
ציטוט Werewolf

אף אחד לא מתעסק בהצפנה חוץ ממני? חבל :(
טוב, אני אסביר את עיקרון הפעולה של מפתח יחיד:

 

p  || a b c d e f g h i j k l m n o p q r s t u v w x y z

key||c a t u v w x yzb de f g  h i  j  kl  mn o p q r  s

כפי שאתם רואים השתמשתי במילת המפתח "cat". האות P מייצגת את המינוח plain text, טקסט רגיל ולא מוצפן - במילים אחרות, abc.

הABC המוצפן עובד בעצם לפי המפתח. כאן השתמשתי במילה CAT כדי להצפין את הABC. האות A תוצפן כ- C, האות B תוצפן כ- A והאות C תוצפן כ - U. המשכתי אחרי האות T לאות U בגלל שהיא זו שבאה אחריה. כך המשכתי את הABC, עד שהגעתי לאות Z. אסור לי לכתוב A - הרי האות B כבר מייצגת A; לכן דילגתי עליה והמשכתי לאות B. כך גם עשיתי ב - C, הרי השתמשתי באות הזו כבר, לכן עברתי לאות D. הABC המוצפן לפי מילת הפתח CAT הסתיים בדיוק באות S - זו שבאה לפני T, שאמרה לנו באיזו אות להתחיל את הABC המוצפן לאחר המפתח. כך יש מחזוריות כל הזמן, ולפעמים אורך המפתח הוא שווה אורך להודעה. זוהי הצפנה מושלמת.

אם אני ארצה להצפין את המילה WEREWOLF על פי הABC המוצפן במפתח CAT, אני אכתוב: PVKVPHEW.

עכשיו אולי מישהו יוכל לעזור לי לפתח אלגוריתם הצפנה למפתח יחיד בשפת C? זו דרישה הרבה יותר קלה

חזרה לתחילת העמוד הצג את כרטיס החבר של Werewolf חפש הודעות אחרות של Werewolf
 
אורח
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 29 April 2006 בשעה 12:01 | IP רשוּם
ציטוט אורח

הסברת מה הוא מפתח יחיד ובסוף ההודעה אתה מבקש אלגוריתם להצפנה במפתח כפול...אולי תסביר מה זה מפתח כפול
חזרה לתחילת העמוד הצג את כרטיס החבר של אורח חפש הודעות אחרות של אורח בקר בדף הבית של אורח
 
Werewolf - לא מחובר
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 29 April 2006 בשעה 14:54 | IP רשוּם
ציטוט Werewolf - לא מחובר

קרא שוב את ההודעה... אמרתי בסוף שאולי הבקשה למפתח כפול הייתה מוגזמת, לכן הסברתי מה זה מפתח יחיד וביקשתי שתתעלמו מהבקשה על המפתח הכפול.
חזרה לתחילת העמוד הצג את כרטיס החבר של Werewolf - לא מחובר חפש הודעות אחרות של Werewolf - לא מחובר בקר בדף הבית של Werewolf - לא מחובר
 
Werewolf
משתמש מתחיל
משתמש מתחיל
סמל אישי

הצטרף / הצטרפה: 25 April 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 21
נשלח בתאריך: 29 April 2006 בשעה 17:43 | IP רשוּם
ציטוט Werewolf

סליחה, טעות שלי אתה צודק, כתבתי בטעות מפתח כפול.

הכוונה שלי הייתה למפתח יחיד בסוף ההודעה.

חזרה לתחילת העמוד הצג את כרטיס החבר של Werewolf חפש הודעות אחרות של Werewolf
 
אורח
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 29 April 2006 בשעה 20:13 | IP רשוּם
ציטוט אורח

אוקיי...אני יכולה לכתוב לך את זה בC++ אם אתה מעוניין.
חזרה לתחילת העמוד הצג את כרטיס החבר של אורח חפש הודעות אחרות של אורח בקר בדף הבית של אורח
 
Werewolf
משתמש מתחיל
משתמש מתחיל
סמל אישי

הצטרף / הצטרפה: 25 April 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 21
נשלח בתאריך: 30 April 2006 בשעה 15:30 | IP רשוּם
ציטוט Werewolf

אני אשמח.

חזרה לתחילת העמוד הצג את כרטיס החבר של Werewolf חפש הודעות אחרות של Werewolf
 
אורח
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 02 May 2006 בשעה 15:04 | IP רשוּם
ציטוט אורח

קוד:

#include<stdio.h>
#include<string.h>

typedef char string[256];

int check(string word, char tav)
  {
  int j;
  for (j=0;j<strlen(word);j++)
    if (tav==word[j])
      return 1;
  return 0;
  }  

void makekey(char key[2][26])
  {
  string word;
  int g,i,b,m,k;
  char tav;
  key[0][0]='a';
  for (i=1;i<26;i++)
    key[0]=key[0][i-1]+1;
  gets(word);
  for (i=0;i<26;i++)
    {
    m=1;
    if (i<strlen(word))
      {
      key[1]=word;
      tav=word;
      }
    else
      {    
      b=1;      
      if (tav=='z')
         {
         tav='a';
         b=0;
         }
     else
        tav=key[1][i-1]+b;
     for(k=0;k<26;k++)
        {
        if (check(word,tav)==0)
          key=26;
        else
          {
          b++;
          tav++;
          }
        if (tav>'z')
          {
          tav='a';
          k=0;
          }
        }
      key[1]=tav;
      }
    }
  }       

void encrypt(char key[2][26])
  {
  string strkelet,strpelet;
  int i,j;
  char e;
  gets(strkelet);
  for(i=0;i<strlen(strkelet);i++)
    {
    for (j=0;j<26;j++)
      if (strkelet==key[0][j])
        {
        e=key[1][j];
        j=26;
        }
    if (strkelet==' ')
      strpelet=' ';
    else
      strpelet=e;
    }
  for (i=0;i<strlen(strkelet);i++)
    printf("%c",strpelet);
  }
   

int main()
  {
  char key[2][26];
  makekey(key);
  encrypt(key);
  return 0;
  }

חזרה לתחילת העמוד הצג את כרטיס החבר של אורח חפש הודעות אחרות של אורח בקר בדף הבית של אורח
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה