0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

科普一下放射密码的原理及其实现方法

冬至子 来源:计算机科学实验室 作者:好坏生长 2023-01-18 11:00 次阅读

放射密码可以说是凯撒密码的升级,在凯撒密码中,明文字母表向前或者向后移动一个固定数值,得到密文,在仿射密码中,给加密函数添加了一个系数。

2.jpg

加密函数有参数(a,b),作为密钥,x表示的就是明文字符。明文字母可以转换为0~25这些数值,p=26.解密函数中,需要求a的逆元,例如a=7,那么a的逆元可以是15(最小的正整数)。

(乘法逆元的求解,可以借助扩展欧几里得算法实现。)

2.jpg

仿射密码的实现过程如下。

#include
#include


//最大公约数
int gcd(int m, int n)
{
  int r;
  while (0 != n)
  {
    r = m % n;
    m = n;
    n = r;
  }
  return m;
}


//扩展欧几里得算法
//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);    //递归求解最大公约数。
  int temp = *x;
  *x = *y;            //回溯表达式1:x1 = y2;
  *y = temp - a / p * (*y);    //回溯表达式2:y1 = x1 - m/n * y2;
  return gcd;
}


//a*x=1(mod p) 乘法逆元
//a与p互素,a关于模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;    //为了使余数一定为正数
  }
}




//加密算法
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;
}

审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 加密解密算法

    关注

    0

    文章

    7

    浏览量

    1619
  • GCDM
    +关注

    关注

    0

    文章

    4

    浏览量

    2153
收藏 人收藏

    评论

    相关推荐

    科普一下CAN总线的基础知识

    CAN总线是种常用的总线,对于刚开始接触CAN总线的,面对着各式各样的资料,可能不知道从何看起,今天科普一下CAN总线的基础知识。CAN2.0协议分为A版本和B版本,A版本协议为11位标识符(标准帧),B版本在兼容11位ID标
    发表于 05-16 09:49 3302次阅读
    <b class='flag-5'>科普</b><b class='flag-5'>一下</b>CAN总线的基础知识

    求大佬分享种新的短波跳频通信网位同步方法及其实现

    求大佬分享种新的短波跳频通信网位同步方法及其实现
    发表于 05-28 06:52

    科普一下ZYNQ是什么

    关注、星标公众号,直达精彩内容来源:ZYNQ作者:watchman最近公司开始做个项目,再次使用到ZYNQ,今天给大家科普一下ZYNQ是什么,以及ZYNQ在嵌入式系统中的应用情况。
    发表于 11-05 08:53

    科普一下笔记本电脑BIOS芯片是个啥

      刷写BIOS是个相对危险的事,如果刷写过程中出了意外那么电脑就会坏掉,只能拆开电脑把BIOS芯片卸下来用编程器重新刷写了。首先科普一下笔记本电脑BIOS芯片是个啥?来自360百科的释义
    发表于 02-16 07:55

    小编科普一下RK3399/libdrm/modetest

    小编科普一下RK3399/libdrm/modetest
    发表于 03-07 07:06

    PSoC的动态配置能力及其实现方法

    首先阐述Cypress 公司的可编程片上系统(PSoC) 的动态配置能力及其实现结构,概要地列出几种对PSoC 微控制器在系统编程(ISP)的方法;在此基础上分析CY8C26443-24PI 通过串口实现在系统
    发表于 05-14 16:24 17次下载

    种基于RS485总线的网络协议及其实现方法1

    种基于RS485总线的网络协议及其实现方法
    发表于 05-15 14:26 19次下载

    3G业务及其实现

    第八章 3G业务及其实现
    发表于 06-17 16:48 25次下载

    Silabs MCU低功耗优势及其实现方法

    Silabs MCU低功耗优势及其实现方法:现在的电子产品,对低功耗的要求越来越高。产品低功耗的问题是经常让产品设计者头痛而又不得不面对的个问题。以单片机为核心的系统,其功
    发表于 01-16 15:23 18次下载

    基于GPS的异地数据采集的改进同步方法及其实现

    基于GPS的异地数据采集的改进同步方法及其实现 工程中经常需要实现异地数据的同步采集。现有的该类系统大多采用对采集的数据打“时间戳”的方法实现
    发表于 03-08 16:41 992次阅读
    基于GPS的异地数据采集的改进同步<b class='flag-5'>方法</b><b class='flag-5'>及其实现</b>

    CAN总线通信协议的分析和实现 CAN总线通信协议以及其实现方法

    CAN总线通信协议的分析和实现 CAN总线通信协议以及其实现方法
    发表于 09-04 08:45 40次下载
    CAN总线通信协议的分析和<b class='flag-5'>实现</b> CAN总线通信协议以<b class='flag-5'>及其实现</b><b class='flag-5'>方法</b>

    基于ADMCF341DSP控制器的改进型单次电流传感方法及其实现

    基于ADMCF341DSP控制器的改进型单次电流传感方法及其实现
    发表于 05-18 20:36 1次下载
    基于ADMCF341DSP控制器的改进型单次电流传感<b class='flag-5'>方法</b><b class='flag-5'>及其实现</b>

    分享一下Cortex-M裸机环境临界区保护的几种实现方法

    RTOS有临界区,裸机依然有临界区。今天给大家分享一下Cortex-M裸机环境临界区保护的几种实现方法
    发表于 06-13 09:08 789次阅读
    分享<b class='flag-5'>一下</b>Cortex-M裸机环境<b class='flag-5'>下</b>临界区保护的几种<b class='flag-5'>实现</b><b class='flag-5'>方法</b>

    科普一下MTU是什么,如何设置MTU

    欢迎来到东用知识小课堂,下面我们就来科普一下一下MTU是什么,如何设置MTUMTU是最大传输单元的意思,代指类通讯协议某层上所能通过的最大数据包大小(以byte为单位)。最大传输单
    的头像 发表于 10-29 06:00 4741次阅读
    <b class='flag-5'>科普</b><b class='flag-5'>一下</b>MTU是什么,如何设置MTU

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

    欢迎来到东用知识小课堂,今天东东来给大家简单科普一下APN以及它在路由器上面的配置方法APN(AccessPointName)指种网络接入技术,它决定了手机通过哪种接入方式来进行拨号
    的头像 发表于 03-13 10:57 7826次阅读
    给大家<b class='flag-5'>科普</b><b class='flag-5'>一下</b>什么是APN及配置<b class='flag-5'>方法</b>