📄 rsa.cpp
字号:
#include "rsa.h"
#include "prime.h"
static vlong from_str( const char * s )
{
vlong x = 0;
while (*s)
{
x = x * 256 + (unsigned char)*s;
s += 1;
}
return x;
}
void private_key::create(const char * r1, const char * r2 )
{
// Choose primes
prime_factory pf;
p = pf.find_prime( from_str(r1) );
q = pf.find_prime( from_str(r2) );
if ( p > q )
{
vlong tmp = p;
p = q;
q = tmp;
}
// Calculate public key
m = p*q;
e = 65537;
while ( gcd(p-1,e) != 1 || gcd(q-1,e) != 1 )
e += 2;
// Calculate private key
d = modinv( e, (p-1)*(q-1) ); // d*e=1 mod (p-1)(q-1)
}
vlong public_key::encrypt( const vlong& plain )
{
return modexp( plain, e, m );
}
vlong private_key::decrypt( const vlong& cipher )
{
return modexp(cipher,d,m);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -