博福特密码,是一种类似于维吉尼亚密码的替代密码,由弗朗西斯·蒲福(Francis Beaufort)发明。它最知名的应用是M-209密码机。博福特密码属于对等加密,即加密演算法与解密演算法相同

博福特密码是按mod q减法运算的一种周期代替密码。即 ci+td=δi(mi+td)≡(ki-mi+td)(mod q)
所以,它和维吉尼亚密码类似,以ki为密钥的代替表是密文字母表为英文字母表逆序排列进行循环右移ki+1次形成的。例如,若ki=(相当于字母D),则明文和密文的对应关系如下:
 明文:a b c d e f g h i j k l m n o p q r s t u v w x y z
 密文:D C B A Z Y X W V U T S R Q P O N M L K J I H G F E
显然,博福特密码的解密变换为 mi+td≡δi(ci+td)≡(ki-ci+td)(modq)
因此,博福特密码的解密变换与加密变换相同。按博福特密码,以密钥ki加密相当于按下式的维吉尼亚加密:ci+td≡[(q-)-mi+td](modq)
若按下式加密:  ci+td≡(mi+td-ki)(modq)
就 得到变异的博福特密码,相应代替表示将明文字母表循环右移ki次而成。由于循环右移ki次等于循环左移(q-ki)次,即式ci+td≡(mi+td- ki)(modq)等价于以(q-ki)为密钥的维吉尼亚密码。所以维吉尼亚密码和变异的博福特密码互为逆变换,若一个是加密运算,则另一个就是解密运算。

博福特密码加密
#include
#include
#include

void Encry()
{
    ];
    char ch,temp;
    ,j=;
    if(getchar()=='\n')
        temp=' ';
    printf("请输入密钥: ");
    gets(key);
    L=strlen(key);

    printf("输入明文: ");

    while((ch=getchar())!='\n')
    {
        if(ch==' ')
        {
            i++;
            continue;
        }

        printf(-(ch+)+key[j%L]+)&+'A');
        j++;
        )
            printf(" ");
        i++;
    }
    putchar(ch);
}

int main()
{
    Encry();
    ;
}

博福特密码解密

#include
#include
#include

void Decry()
{
    ];
    char ch,temp;
    ,j=;
    if(getchar()=='\n')
        temp=' ';
    printf("请输入密钥: ");
    gets(key);
    L=strlen(key);

    printf("输入密文: ");

    while((ch=getchar())!='\n')
    {
        if(ch==' ')
        {
            i++;
            continue;
        }
        printf(-ch)&+);
        j++;
        )
            printf(" ");
        i++;
    }
    putchar(ch);
}

int main()
{
    Decry();
    ;
}

Beaufort密码的更多相关文章

  1. CTF中常见密码题解密网站总结

    0x00.综合 网站中包含大多编码的解码. http://web2hack.org/xssee/ https://www.sojson.com/ http://web.chacuo.net/ 0x01 ...

  2. 对抗密码破解 —— Web 前端慢 Hash

    (更新:https://www.cnblogs.com/index-html/p/frontend_kdf.html ) 0x00 前言 天下武功,唯快不破.但在密码学中则不同.算法越快,越容易破. ...

  3. 当忘记mysql数据库密码时如何进行修改

    因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...

  4. 【WCF】使用“用户名/密码”验证的合理方法

    我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然 ...

  5. Centos 下 mysql root 密码重置

    重置mysql密码的方法有很多,官网也提供了很方便的快捷操作办法,可参考资料 resetting permissions .本文重置密码的具体步骤如下: 一.停止MySQL(如果处于运行状态) #se ...

  6. CentOS7 重置root密码

    1- 在启动grub菜单,选择编辑选项启动 2 - 按键盘e键,来进入编辑界面 3 - 找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh 4 - 现在按下 Con ...

  7. Mac上MySQL忘记root密码且没有权限的处理办法&workbench的一些tips (转)

    忘记Root密码肿么办 Mac上安装MySQL就不多说了,去mysql的官网上下载最新的mysql包以及workbench,先安装哪个影响都不大.如果你是第一次安装,在mysql安装完成之后,会弹出来 ...

  8. 从c#角度看万能密码SQL注入漏洞

    以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...

  9. C# 用SoapUI调试WCF服务接口(WCF中包含用户名密码的验证)

    问题描述: 一般调试wcf程序可以直接建一个单元测试,直接调接口. 但是,这次,我还要测试在接口内的代码中看接收到的用户名密码是否正确,所以,单一的直接调用接口方法行不通, 然后就想办法通过soapU ...

随机推荐

  1. winform 属性

    WinForm为客户端程序必须在.NET Framework框架上运行 一.常用属性: 布局: AutoScroll:当控件内容超出可见区域是否显示滚动条: Autosize:当控件内容有超出时是否自 ...

  2. Win10 FaceAPI小demo开发问题汇总

    Win10 FaceAPI小demo开发问题汇总 最近使用微软牛津计划做一个小demo,使用FaceAPI做一个小应用,实现刷脸的功能.开发的过程中用到几个问题,具体如下: Stream 与IRand ...

  3. 身份证号码15位转18位 C#实现

    [身份证最后一位神秘X的由来]身份证中的“冷知识”1999年的今天,<国务院关于实行公民身份号码制度的决定>被发布,当年10月1日实施.为什么有的有X?这位数是根据前17位计算出的校验码. ...

  4. SharePoint 2013 内容部署功能简介

    在之前的项目中,当客户有新的需求的时候,我们通常在测试环境上开发或者实施,然后手动在生产环境再弄一次.当发现内容部署这个东西,才知道这样是多么不合理的.我们可以创建两个网站集,一个用来修改,然后通过计 ...

  5. 关于ApplicationPoolIdentity

    一直以来IIS中的网站默认都是以network service在运行,但是从IIS7开始,默认会以ApplicationPoolIdentity运行. 这个账户比较特殊,是一种虚拟帐户,你无法在计算机 ...

  6. 利用在线工具自动化生成findviewById

    我们在编码的时候经常会用到findviewById,不厌其烦,我之前介绍过一个很取巧的方法,挺好用的,这里再贴一下: public class KaleBaseActivity extends Act ...

  7. 谷歌的网页排序算法(PageRank Algorithm)

    本文将介绍谷歌的网页排序算法(PageRank Algorithm),以及它如何从250亿份网页中捞到与你的搜索条件匹配的结果.它的匹配效果如此之好,以至于“谷歌”(google)今天已经成为一个被广 ...

  8. Android开发, 如何看logcat

    有如下log:   android.view.InflateException: Binary XML file line #2: Error inflating class com.hankkin. ...

  9. App开发流程之配置Info.plist文件

    Info.plist文件控制应用的全局配置,例如bundle name,display name. 先来看一下默认创建的Info.plist文件 右键左侧的Info.plist文件,可以open as ...

  10. 【读书笔记】iOS-GCD-block

    一,block的定义 //申明变量 (void)(^PrintStr)(void); //定义 PrintStr=^{ NSLog(@"PrintStr"); }; //调用 Pr ...