2016-12-10 7 views
-6

私はC++でRSAアルゴリズムを実装するプロジェクトに取り組んでいます。以前はC++については考えていませんでしたが、まだ学習しています RSAの私の質問は、 -25: エンコードを0に、 を1に、 を2に、 をエンコードする。 。ここでは25、RSAアルゴリズムのC++への埋め込み

へ zは私のコードです:

/* 
* C++ Program to Implement the RSA Algorithm 
*/ 
#include<iostream> 
#include<math.h> 
#include<string.h> 
#include<stdlib.h> 

using namespace std; 

long int p, q, n, t, flag, e[100], d[100], temp[100], j, m[100], en[100], i; 
char msg[100]; 
int prime(long int); 
void ce(); 
long int cd(long int); 
void encrypt(); 
void decrypt(); 
int prime(long int pr) 
{ 
    int i; 
    j = sqrt(pr); 
    for (i = 2; i <= j; i++) 
    { 
     if (pr % i == 0) 
      return 0; 
    } 
    return 1; 
} 
int main() 
{ 
    cout << "\nENTER FIRST PRIME NUMBER\n"; 
    cin >> p; 
    flag = prime(p); 
    if (flag == 0) 
    { 
     cout << "\nWRONG INPUT\n"; 
     exit(1); 
    } 
    cout << "\nENTER ANOTHER PRIME NUMBER\n"; 
    cin >> q; 
    flag = prime(q); 
    if (flag == 0 || p == q) 
    { 
     cout << "\nWRONG INPUT\n"; 
     exit(1); 
    } 
    cout << "\nENTER MESSAGE\n"; 
    fflush(stdin); 
    cin >> msg; 
    for (i = 0; msg[i] != NULL; i++) 
     m[i] = msg[i]; 
    n = p * q; 
    t = (p - 1) * (q - 1); 
    ce(); 
    cout << "\nPOSSIBLE VALUES OF e AND d ARE\n"; 
    for (i = 0; i < j - 1; i++) 
     cout << e[i] << "\t" << d[i] << "\n"; 
    encrypt(); 
    decrypt(); 
    return 0; 
} 
void ce() 
{ 
    int k; 
    k = 0; 
    for (i = 2; i < t; i++) 
    { 
     if (t % i == 0) 
      continue; 
     flag = prime(i); 
     if (flag == 1 && i != p && i != q) 
     { 
      e[k] = i; 
      flag = cd(e[k]); 
      if (flag > 0) 
      { 
       d[k] = flag; 
       k++; 
      } 
      if (k == 99) 
       break; 
     } 
    } 
} 
long int cd(long int x) 
{ 
    long int k = 1; 
    while (1) 
    { 
     k = k + t; 
     if (k % x == 0) 
      return (k/x); 
    } 
} 
void encrypt() 
{ 
    long int pt, ct, key = e[0], k, len; 
    i = 0; 
    len = strlen(msg); 
    while (i != len) 
    { 
     pt = m[i]; 
     pt = pt - 96; 
     k = 1; 
     for (j = 0; j < key; j++) 
     { 
      k = k * pt; 
      k = k % n; 
     } 
     temp[i] = k; 
     ct = k + 96; 
     en[i] = ct; 
     i++; 
    } 
    en[i] = -1; 
    cout << "\nTHE ENCRYPTED MESSAGE IS\n"; 
    for (i = 0; en[i] != -1; i++) 
     printf("%c", en[i]); 
} 
void decrypt() 
{ 
    long int pt, ct, key = d[0], k; 
    i = 0; 
    while (en[i] != -1) 
    { 
     ct = temp[i]; 
     k = 1; 
     for (j = 0; j < key; j++) 
     { 
      k = k * ct; 
      k = k % n; 
     } 
     pt = k + 96; 
     m[i] = pt; 
     i++; 
    } 
    m[i] = -1; 
    cout << "\nTHE DECRYPTED MESSAGE IS\n"; 
    for (i = 0; m[i] != -1; i++) 
     printf("%c", m[i]); 
} 
+1

そして、あなたの質問は何ですか? [ask]をお読みください。 –

答えて

0

ない私はあなたの質問の権利が、私の賭け金を得ることを確認あなたは文字のASCIIと数表現との間で変換する方法を求めているです。

エンコード/デコードは、RSAとは関係ありません。ダイナミックレンジシフトを使用するだけです。 ASCIIのアルファベットが昇順になっているので、残っているのはaまたはAをゼロにオフセットすることだけです。番号変換試しに小文字のcharの

cはあなたのキャラクターとiある

char c='q'; // c is you character q for example 
int i;  // i is output number 
if ((c>='a')&&(c<='z')) i=c-'a'; 
else     i=c-'A';` 

です:あなたは、両方の小文字と大文字を得た場合

char c='m'; // c is you character m for example 
int i=c-`a`; // i is output number 

あなたはそれを変更する必要があります出力番号

数値から文字への変換try:

c=i+`a`; 

または大文字のため:

c=i+`A`; 
関連する問題