Codevs 加密演算法

2021-07-06 09:12:22 字數 1590 閱讀 5324

題目描述 description

rivest是密碼學專家。近日他正在研究一種數列e=,

且e[1]=e[2]=p(p為乙個質數),e[i]=e[i-2]*e[i-1]

例如就是p=2的數列。在此基礎上他又設計了一種加密

演算法,該演算法可以通過乙個金鑰q將乙個正整數n加密成另外乙個正整數d,計

算公式為:d=e[n] mod q。現在rivest想對一組資料進行加密,但他對程式設計不太

感興趣,請你幫助他設計乙個資料加密程式。

輸入描述 input description

讀入m,p。其中m表示資料個數,p用來生成數列e。

以下有m行,每行有2個整數n,q。n為待加密資料,q為金鑰。

m,p,n,q都在int內

輸出描述 output description

將加密後的資料按順序輸出到檔案a.out。

第i行輸出第i個加密後的資料。

樣例輸入 sample input

2 7

4 5

4 6樣例輸出 sample output3 1

#include

#include

#include

#include

using

namespace

std;

#define maxn 100000

typedef

long

long ll;

ll m,q,n,mod;

typedef ll mat[2][2];

mat a,b,c;

ll pow_mod(ll x,ll y,ll mod)

return ret;

}int prime[maxn],topp=-1;

bool pflag[maxn];

void init()

}}ll get_phi(ll x)}}

if (x!=1)

ret*=x-1;

return ret;

}int main()

if (mod==q)

phi_mod=get_phi(mod);

a[0][0]=a[0][1]=a[1][0]=1;

a[1][1]=0;

b[0][0]=b[1][1]=1;

b[1][0]=b[0][1]=0;

n--;

while (n)

memset(c,0,sizeof(c));

for (i=0;i<2;i++)

for (j=0;j<2;j++)

for (k=0;k<2;k++)

c[i][j]=(c[i][j]+a[i][k]*a[k][j]%phi_mod)%phi_mod;

memcpy(a,c,sizeof(c));

n>>=1;

}printf("%lld\n",pow_mod(q,b[0][0],mod));

}}

對稱加密演算法 DES加密演算法

一 對稱加密演算法 對稱加密也稱為常規加密 私鑰或單鑰加密。乙個對稱加密由5部分組成 明文 plaintext 這是原始資訊或資料,作為演算法的輸入。加密演算法 encryption algorithm 加密演算法對明文進行各種替換和轉換。金鑰 secret key 金鑰也是演算法的輸入。演算法進行...

gentry同態加密演算法 同態加密演算法

本文對同態加密演算法進行學習。參考文章同態加密演算法。定義同態加密演算法保證對聯合密文的解密結果等價於聯合明文。若存在同態加密演算法f,針對明文a和b,加密後分別得到a f a b f b 將其和a b 解密後得到a b,則同態加密演算法f被成為加法同態加密演算法。加法同態演算法的加密和解密分別用e...

對稱加密演算法 非對稱加密演算法

對稱加密演算法 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,資料發信方將明文 原始資料 和加密金鑰一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的金鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文...