夢的開始——RSA
題解
RSA的基本演算法,運用快速冪求出來每個數個d次方求餘於n,對應到字母表的每一個字元
程式碼
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<map>
using namespace std;
#define N 1000000
int pp[N],pri[N],tot,m;
char A[N] = {"abcdefghijklmnopqrstuvdxyz"};
char C[N] = {"0156 0821 1616 0041 0140 2130 1616 0793"};
int B[N];
int n = 2537, e = 13, d = 937, q, p;
int init_prim()
{
for (int i = 2; i <= 100;i++){
if(pp[i]==0){
tot++;
pri[tot] = i;
}
for (int j = 1; j <= tot&&i*pri[j]<=100;j++){
int t = pri[j];
pp[t * i] = 1;
if(i%t==0)
break;
}
}
}
void get_pq(){
for (int i = 1; i <= tot;i++){
int t = pri[i];
if((n%t)==0){
p = t;
q = n / t;
break;
}
}
}
int init()
{
int tt = strlen(C);
for (int i = 0; i < tt;i++){
if(C[i]!=' '){
B[m] = C[i] - '0';
m++;
}
}
}
int pow(int a,int b){
int temp = a;
int ans=1;
while(b){
if(b&1){
ans *= temp;
ans %= n;
}
temp *=temp;
temp %= n;
b >>= 1;
}
return ans;
}
int main(){
init();
init_prim();
get_pq();
for (int i = 0; i < m;i+=4){
int t = i,k=0,m=1000;
int sum = 0;
while(k<4){
sum += B[i + k]*m;
m /= 10;
k++;
}
//cout << sum << " ";
char c = pow(sum, d);
cout <<A[c];
}
}
相關文章
- 或許是夢開始的起點?
- 10月書訊 | 矽谷,夢開始的地方
- 從開封到鄭州再到廣州,我的IT夢開始的地方
- 二十三歲:一場夢想的追逐開始了
- python中rsa的RSAPython
- 織夢dedecms清空文章後id如何從1開始
- 問題徵集|關於2020 RSA,綠盟科技現場答疑即將開始
- 心懷夢想篤定前行,科銳40期開始招生啦!
- 新的開始
- 春天的開始
- 故事的開始
- RSA公開金鑰系統
- 蘋果的遊戲機夢,可能是從 25 年前這款失敗產品開始的蘋果遊戲
- 【序】新的開始
- 2024,新的開始
- RSA加密遇到的坑加密
- 一切的開始
- 敲程式碼的開始
- IOS 逆向開發(一)密碼學 RSAiOS密碼學
- 不怕從零開始,只怕從未開始!
- RSA加密加密
- Casdoor 開始
- <001>開始......
- TensorRT 開始
- Supervisor 開始
- 開始了,
- RSA簽名的PSS模式模式
- 公開金鑰演算法-RSA-note演算法
- 前端路漫漫-新的開始前端
- 2010年RSA大會RSA總裁主題演講:雲的安全
- 《偶像夢幻祭2》預演測試即將開始!定檔2020年10月15日!
- Win10系統下開始選單怎麼切換成開始螢幕_win10開始選單切換成開始螢幕的方法Win10
- LUC_RSA
- java RSA 解密Java解密
- RSA入門
- javascript RSA 加密JavaScript加密
- 開始Go開發之旅Go
- 開始和起名