#include<iostream>
#include<math.h>
#include<string>
#include<cstring>
using namespace std;
int gcd(int n,int m)
{
if(m<=n && n%m ==0)
return m;
if(n<m)
return gcd(m,n);
else
return gcd(m,n%m);
}
int REncryptText(int m)
{int b = double(m);
int p = 11, q = 3;
int e = 3;
double n = p * q;
int phi = (p - 1) * (q - 1);
int check1 = gcd(e, p - 1);
int check2 = gcd(e, q - 1);
int check3 = gcd(e, phi);
// // Compute d such that ed ≡ 1 (mod phi)
//i.e. compute d = e-1 mod phi = 3-1 mod 20
//i.e. find a value for d such that phi divides (ed-1)
//i.e. find d such that 20 divides 3d-1.
//Simple testing (d = 1, 2, ...) gives d = 7
// double d = Math.Pow(e, -1) % phi;
int d = 7;
// public key = (n,e) // (33,3)
//private key = (n,d) //(33 ,7)
double g = pow(b,e);
double ciphertext = g % n; // here error
// Now say we want to encrypt the message m = 7, c = me mod n = 73 mod 33 = 343 mod 33 = 13. Hence the ciphertext c = 13.
//double decrypt = Math.Pow(ciphertext, d) % n;
return int(ciphertext);
}
int main()
{
char plaintext[80],str[80];
cout<<" enter the text you want to encrpt";
cin.get(plaintext,79);
int l =strlen(plaintext);
for ( int i =0 ; i<l ; i++)
{
char s = plaintext[i];
str[i]=REncryptText(static_cast<char>(s));
}
for ( int i =0 ; i<l ; i++)
{
cout<<"the encryption of string"<<endl;
cout<<str[i];
}
return 0;
}
现在错误来了 错误C2297:'%':非法,右操作数的类型为'double' 错误C2668:'pow':对重载函数的模糊调用
答案 0 :(得分:2)
#include <cstring>
要strlen
宣布int ciphertext = g % n;
中的行REncryptText
将无效,因为您无法对double
执行整数模运算。您需要找到更好的方法来进行模幂运算;在网上搜索或拿起一本好的算法教科书,这并不像看起来那么简单。