用计算思维写简单的密码(含源代码)精选.pdfVIP

用计算思维写简单的密码(含源代码)精选.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用计算思维写简单的密码(含源代码)精选

用计算思维写密码程序 作者:王兆远 1 何祎 1 韩彦强 1 (南开大学物理科学学院,天津 300071 ) 内容提要:简单介绍了密码学的起源、介绍了几种简单密码并给出了代码。 关键字:计算思维、密码、凯撒密码、Atbash 密码、换位密码 在有些时候,信息的保密性直接决定信息的价值,尤其是在涉及 国家的机密或个人的隐私的时候。在这些时候,我们将需要将信息变 成只有自己人才明白的“暗语”,而使外来人不知所云。在密码学中 这一过程称为加密(encryption),加密前的信息称为明文(clear text),加密过后的信息称为密文(cipher text),而密钥是打开 加密的钥匙,通常它是在明文转换为密文或将密文转换为明文的算法 中输入的一种参数。用来传递加密后的信息的载体是加密旨,由于加 密的方法多种多样,加密旨的形式也多种多样,密码像蛋白质分子一 样千奇百怪。 密码学是一个神秘而吸引人的学科。它在人类历史上起到了独特 的作用,早在古罗马时代密码就出现在了战争中,用来秘密地传达消 息。在《高卢战记》中恺撒就记录了自己使用密码来传达军事命令的 策略,他由此成为历史上第一个使用加密旨的将领。于是他所使用的 这种密钥为3 的移位密码被称为恺撒密码。二战时密码战的博弈几乎 同战场上的厮杀一样激烈,德国开始使用当时世界上最先进的Enigma 密码机,而英国建造了“炸弹”机专门用来破译德军的密码;太平洋 战场上,美军用“钓鱼”法巧妙破译了日军的情报。到了今天,人们 一方面在不断求索着更好的加密算法用来保护信息的安全,另一方面 也在不断研究密码的破译来进行间谍或反恐工作。 由于我们在密码学和编程方面知识的局限,本文的讨论仅限于用 计算思维给出几个简单密码的算法。 1.凯撒密码 这种密码因为首先被裘里斯·凯撒使用并记载而闻名。它是一种 以26 个罗马字母(即拉丁字母)为基础的替换密码,所谓替换,意 即使26 个字母中的每个都有唯一另一个和它对应。凯撒密码的替换 规则是将每个字母换成后移 3 位的另一个字母(例如 a 换为d)。它 又被称为移位密码,这可以说是最简单的替换密码了。它在专业加密 中已经被淘汰,而由它发展出的ROT13 如今经常可见于英语社会娱乐 性的言论中,用以隐晦地表达一些看法。后来在凯撒密码的基础上还 形成著名的多表替换密码——维吉尼亚密码(本文不讨论此密码)。 想要将这样一个密码用算法实现,我们很容易想到用英文字母在 ASCII 码中的连续性。定义一个字符串,将原文赋值给它。将串中每 个字符的值加上一个移位值,输出加密后的字符串。而在ASCII 码中 不仅有英文字母,还有其他字符如标点。考虑到这一点,可以将移位 的范围拓延到更大的范围内(移位值可以取-33~5,下面的程序中缩 小了范围),只要不替换为不能输出的字符。而解密程序只要将移位 值取加密时的相反数。最后用do while 语句使之可以连续地执行加 密或解密。该程序代码如下: #includeiostream using namespace std; int main() { char jud,A[100],B[100]; int key,n; do { cout请输入密钥值n(0n5) :; cinkey; cout请输入密文:; rewind(stdin); gets(A); n=strlen(A); for(int i=0;i=n-1;i++) B[i]=A[i]-key; B[n]=0; cout加密后的文字为:Bendl; cout是否继续执行该程序?(输入Y 继续执行); cinjud; }while(jud==Y); return 0; } 2.Atbash 密码 Atbash 源于希伯来文,转化到罗马字母

文档评论(0)

pfenejiarz + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档