0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

科普一下放射密碼的原理及其實(shí)現(xiàn)方法

冬至子 ? 來源:計(jì)算機(jī)科學(xué)實(shí)驗(yàn)室 ? 作者:好壞生長(zhǎng) ? 2023-01-18 11:00 ? 次閱讀

放射密碼可以說是凱撒密碼的升級(jí),在凱撒密碼中,明文字母表向前或者向后移動(dòng)一個(gè)固定數(shù)值,得到密文,在仿射密碼中,給加密函數(shù)添加了一個(gè)系數(shù)。

2.jpg

加密函數(shù)有參數(shù)(a,b),作為密鑰,x表示的就是明文字符。明文字母可以轉(zhuǎn)換為0~25這些數(shù)值,p=26.解密函數(shù)中,需要求a的逆元,例如a=7,那么a的逆元可以是15(最小的正整數(shù))。

(乘法逆元的求解,可以借助擴(kuò)展歐幾里得算法實(shí)現(xiàn)。)

2.jpg

仿射密碼的實(shí)現(xiàn)過程如下。

#include
#include


//最大公約數(shù)
int gcd(int m, int n)
{
  int r;
  while (0 != n)
  {
    r = m % n;
    m = n;
    n = r;
  }
  return m;
}


//擴(kuò)展歐幾里得算法
//m*x+n*y=gcd(m,n)
int exgcd(int a, int p, int *x, int *y)
{
  if (0 == p)    //遞歸終止條件
  {
    *x = 1;
    *y = 0;
    return a;
  }
  int gcd = exgcd(p, a % p, x, y);    //遞歸求解最大公約數(shù)。
  int temp = *x;
  *x = *y;            //回溯表達(dá)式1:x1 = y2;
  *y = temp - a / p * (*y);    //回溯表達(dá)式2:y1 = x1 - m/n * y2;
  return gcd;
}


//a*x=1(mod p) 乘法逆元
//a與p互素,a關(guān)于模p的乘法逆元有解
int inv(int a, int p, int *x, int *y)
{
  int gcd = exgcd(a, p, x, y);
  if (1 != gcd)    //說明乘法逆元不存在
  {
    return -1;
  }
  else
  {
    return (*x + p) % p;    //為了使余數(shù)一定為正數(shù)
  }
}




//加密算法
void encrypt(char data[], int a, int b, int p){
  int i = 0;
  while(data[i]){
    if(data[i] >= 'A' && data[i] <= 'Z'){
      data[i] = (a * (data[i] - 'A') + b) % p + 'A';
    }
    else if(data[i] >= 'a' && data[i] <= 'z'){
      data[i] = (a * (data[i] - 'a') + b) % p + 'a';
    }
    else{
      data[i] = data[i];
    }
    i ++;
  }
}


//解密算法
void decrypt(char data[], int a, int b, int p){
  int i = 0;
  int x = 0, y = 0;
  int invA = inv(a, p, &x, &y);
  while(data[i]){
    if(data[i] >= 'A' && data[i] <= 'Z'){
      data[i] = (invA * (data[i] - b - 'A') % p + p) % p + 'A';
    }
    else if(data[i] >= 'a' && data[i] <= 'z'){
      data[i] = (invA * (data[i] - b - 'a') % p + p) % p + 'a';
    }
    else{
      data[i] = data[i];
    }
    i ++;
  }    
}






int main(){


  int a = 7, b = 3, p = 26, x = 0, y = 0;
  printf("%d\\n", exgcd(a, p, &x, &y));
  printf("%d,%d\\n", x, y);
  printf("%d\\n", inv(a, p, &x, &y));


  char data[] = "hot";
  char result[20]={0};


  encrypt(data, a, b, p);
  printf("%s\\n", data);


  decrypt(data, a, b, p);
  printf("%s\\n", data);


  return 0;
}

審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 加密解密算法
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    1603
  • GCDM
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    2137
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    科普一下CAN總線的基礎(chǔ)知識(shí)

    CAN總線是種常用的總線,對(duì)于剛開始接觸CAN總線的,面對(duì)著各式各樣的資料,可能不知道從何看起,今天科普一下CAN總線的基礎(chǔ)知識(shí)。CAN2.0協(xié)議分為A版本和B版本,A版本協(xié)議為11位標(biāo)識(shí)符(標(biāo)準(zhǔn)幀),B版本在兼容11位ID標(biāo)
    發(fā)表于 05-16 09:49 ?3151次閱讀
    <b class='flag-5'>科普</b><b class='flag-5'>一下</b>CAN總線的基礎(chǔ)知識(shí)

    求大佬分享種新的短波跳頻通信網(wǎng)位同步方法及其實(shí)現(xiàn)

    求大佬分享種新的短波跳頻通信網(wǎng)位同步方法及其實(shí)現(xiàn)
    發(fā)表于 05-28 06:52

    科普一下ZYNQ是什么

    關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容來源:ZYNQ作者:watchman最近公司開始做個(gè)項(xiàng)目,再次使用到ZYNQ,今天給大家科普一下ZYNQ是什么,以及ZYNQ在嵌入式系統(tǒng)中的應(yīng)用情況。
    發(fā)表于 11-05 08:53

    科普一下筆記本電腦BIOS芯片是個(gè)啥

      刷寫B(tài)IOS是個(gè)相對(duì)危險(xiǎn)的事,如果刷寫過程中出了意外那么電腦就會(huì)壞掉,只能拆開電腦把BIOS芯片卸下來用編程器重新刷寫了。首先科普一下筆記本電腦BIOS芯片是個(gè)啥?來自360百科的釋義
    發(fā)表于 02-16 07:55

    小編科普一下RK3399/libdrm/modetest

    小編科普一下RK3399/libdrm/modetest
    發(fā)表于 03-07 07:06

    PSoC的動(dòng)態(tài)配置能力及其實(shí)現(xiàn)方法

    首先闡述Cypress 公司的可編程片上系統(tǒng)(PSoC) 的動(dòng)態(tài)配置能力及其實(shí)現(xiàn)結(jié)構(gòu),概要地列出幾種對(duì)PSoC 微控制器在系統(tǒng)編程(ISP)的方法;在此基礎(chǔ)上分析CY8C26443-24PI 通過串口實(shí)現(xiàn)在系統(tǒng)
    發(fā)表于 05-14 16:24 ?17次下載

    種基于RS485總線的網(wǎng)絡(luò)協(xié)議及其實(shí)現(xiàn)方法1

    種基于RS485總線的網(wǎng)絡(luò)協(xié)議及其實(shí)現(xiàn)方法
    發(fā)表于 05-15 14:26 ?19次下載

    3G業(yè)務(wù)及其實(shí)現(xiàn)

    第八章 3G業(yè)務(wù)及其實(shí)現(xiàn)
    發(fā)表于 06-17 16:48 ?25次下載

    Silabs MCU低功耗優(yōu)勢(shì)及其實(shí)現(xiàn)方法

    Silabs MCU低功耗優(yōu)勢(shì)及其實(shí)現(xiàn)方法:現(xiàn)在的電子產(chǎn)品,對(duì)低功耗的要求越來越高。產(chǎn)品低功耗的問題是經(jīng)常讓產(chǎn)品設(shè)計(jì)者頭痛而又不得不面對(duì)的個(gè)問題。以單片機(jī)為核心的系統(tǒng),其功
    發(fā)表于 01-16 15:23 ?18次下載

    基于GPS的異地?cái)?shù)據(jù)采集的改進(jìn)同步方法及其實(shí)現(xiàn)

    基于GPS的異地?cái)?shù)據(jù)采集的改進(jìn)同步方法及其實(shí)現(xiàn) 工程中經(jīng)常需要實(shí)現(xiàn)異地?cái)?shù)據(jù)的同步采集?,F(xiàn)有的該類系統(tǒng)大多采用對(duì)采集的數(shù)據(jù)打“時(shí)間戳”的方法實(shí)現(xiàn)
    發(fā)表于 03-08 16:41 ?961次閱讀
    基于GPS的異地?cái)?shù)據(jù)采集的改進(jìn)同步<b class='flag-5'>方法</b><b class='flag-5'>及其實(shí)現(xiàn)</b>

    CAN總線通信協(xié)議的分析和實(shí)現(xiàn) CAN總線通信協(xié)議以及其實(shí)現(xiàn)方法

    CAN總線通信協(xié)議的分析和實(shí)現(xiàn) CAN總線通信協(xié)議以及其實(shí)現(xiàn)方法
    發(fā)表于 09-04 08:45 ?40次下載
    CAN總線通信協(xié)議的分析和<b class='flag-5'>實(shí)現(xiàn)</b> CAN總線通信協(xié)議以<b class='flag-5'>及其實(shí)現(xiàn)</b><b class='flag-5'>方法</b>

    基于ADMCF341DSP控制器的改進(jìn)型單次電流傳感方法及其實(shí)現(xiàn)

    基于ADMCF341DSP控制器的改進(jìn)型單次電流傳感方法及其實(shí)現(xiàn)
    發(fā)表于 05-18 20:36 ?1次下載
    基于ADMCF341DSP控制器的改進(jìn)型單次電流傳感<b class='flag-5'>方法</b><b class='flag-5'>及其實(shí)現(xiàn)</b>

    分享一下Cortex-M裸機(jī)環(huán)境臨界區(qū)保護(hù)的幾種實(shí)現(xiàn)方法

    RTOS有臨界區(qū),裸機(jī)依然有臨界區(qū)。今天給大家分享一下Cortex-M裸機(jī)環(huán)境臨界區(qū)保護(hù)的幾種實(shí)現(xiàn)方法
    發(fā)表于 06-13 09:08 ?677次閱讀
    分享<b class='flag-5'>一下</b>Cortex-M裸機(jī)環(huán)境<b class='flag-5'>下</b>臨界區(qū)保護(hù)的幾種<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>方法</b>

    科普一下MTU是什么,如何設(shè)置MTU

    歡迎來到東用知識(shí)小課堂,下面我們就來科普一下一下MTU是什么,如何設(shè)置MTUMTU是最大傳輸單元的意思,代指類通訊協(xié)議某層上所能通過的最大數(shù)據(jù)包大小(以byte為單位)。最大傳輸單
    的頭像 發(fā)表于 10-29 06:00 ?4573次閱讀
    <b class='flag-5'>科普</b><b class='flag-5'>一下</b>MTU是什么,如何設(shè)置MTU

    給大家科普一下什么是APN及配置方法

    歡迎來到東用知識(shí)小課堂,今天東東來給大家簡(jiǎn)單科普一下APN以及它在路由器上面的配置方法APN(AccessPointName)指種網(wǎng)絡(luò)接入技術(shù),它決定了手機(jī)通過哪種接入方式來進(jìn)行撥號(hào)
    的頭像 發(fā)表于 03-13 10:57 ?7502次閱讀
    給大家<b class='flag-5'>科普</b><b class='flag-5'>一下</b>什么是APN及配置<b class='flag-5'>方法</b>