在上面的Caesar实现中,我用一个整数替代了原来作为密钥的固定值3。其次,可以通过传入不同的字符集让这个加密算法的适用性更广泛。最后,算法类在初始化的时候,会对替换表做一次扰乱操作,这样的话,即使是相同的替换表,因为初始化传入的seed不同,加密出来的内容也会不同。至于程序的细节,我想源码会更直观的告诉你的。

3、Vigenere加密算法

其实,Vigenere加密算法从历史考证来看好像并不是一个叫Vigenere的人发明的。大概只是因为某些机缘巧合,被一个叫Vigenere的人用了,并且流传开了,然后就被叫做Vigenere加密算法了。后来发现这原来是一个美丽的误解,但是既然都已经被叫习惯了,改口自然是很难了,因此就那么流传下来了。说道这里,Bellaso先生又一次的泪目了。

为什么我这里要把Vigenere密码和Caesar放在一起呢?因为Vigenere算是一个升级版的Caesar算法。所以,当时实现了那个Caesar后,就顺带连 Bellaso 和 Vigenere 先生,也一起缅怀一下了。和Caesar相比Vigenere是一个多表替代,就是说针对明文中不同位置的字母,会选用不同的替换表来加密。如果用上面的例子来说,对于不同位置的字母,会选择不同的key去加密。说白了,就是多个Caesar叠加起来就是Vigenere。

虽然说Vigenere在加密的效果上比Caesar有很多提升了,也弥补了Caesar上存在的一些问题。但是,我的实现还是做了一些小小的调整。

publicclassVigenere {

privateString table;

privateintseedA =1103515245;

privateintseedB =12345;

publicVigenere(String table,intseed) {

this.table = chaos(table, seed, table.length());

}

publicVigenere(String table) {

this(table,11);

}

publicVigenere() {

this(11);

}

publicVigenere(intseed) {

this("ABCDEFGHIJKLMNOPQRSTUVWXYZ", seed);

}

privatechardict(inti,booleanreverse) {

ints = table.length(), index = reverse ? s - i : i;

returntable.charAt(index);

}

privateintdict(charc,booleanreverse) {

ints = table.length(), index = table.indexOf(c);

returnreverse ? s - index : index;

}

privateintseed(intseed) {

longtemp = seed;

return(int)((temp * seedA + seedB) & 0x7fffffffL);

}

publicString chaos(String data,intseed,intcnt) {

StringBuffer buf =newStringBuffer(data);

chartmp;inta, b, r = data.length();

for(inti =0; i

seed = seed(seed); a = seed % r;

seed = seed(seed); b = seed % r;

tmp = buf.charAt(a);

buf.setCharAt(a, buf.charAt(b));

buf.setCharAt(b, tmp);

}

returnbuf.toString();

}

publicString crypto(booleanreverse,

String key, String text) {

String ret =null;

StringBuilder buf =newStringBuilder();

intm, k, s = table.length(),

e = text.length(),

ke = key.length();

for(inti =0; i

m = dict(text.charAt(i), reverse);

k = dict(key.charAt(i % ke),false);

if(m <0|| k <0)break;

m = m + k + i;

buf.append(dict(m % s, reverse));

}

if(buf.length() == e)

ret = buf.toString();

returnret;

}

publicString encode(String key, String text) {

returncrypto(false, key, text);

}

publicString decode(String key, String text) {

returncrypto(true, key, text);

}

publicstaticvoidmain(String[] args) {

Vigenere vigenere =newVigenere();

String data = vigenere.encode("BELLASO","APPLE");

vigenere.decode("BELLASO", data);

}

}

32/3<123>

caesar java_Java之Caesar与Vigenere实现相关推荐

  1. Caesar I (Crypto, Training) 的多种简单解法

    题目详情 As on most challenge sites, there are some beginner cryptos, and often you get started with the ...

  2. 庆祝祖国成立72周年 做点题目之 BUUCTF Crypto 刷题

    BUUCTF 刷题之 Crypto 部分wp 大二了,事情很多,省赛在即,速刷题,强技能,展风采! 文章目录 BUUCTF 刷题之 Crypto 部分wp 一.这是什么 二.[HDCTF2019]bb ...

  3. krypton(0-6)

    krypton 0--> krypton 1 关卡提示:Welcome to Krypton! The first level is easy. The following string enc ...

  4. java报错只有一个数字4,Java 报错 illegal Key Size

    推荐文章 Passwords are still the primary method of authentication today, in a form of something you know ...

  5. wp7 HubTile

    在最新的Windows Phone Toolkit中我们可以看到HubTile这个控件,首先先了解下什么是HubTile,简单来说,就是允许你给你的应用程序添加些生动或富有意义的瓦片(Tile).Hu ...

  6. python和python stub文件类型的区别_python – 如何告诉mypy包含stubfile

    我正在玩mypy(版本:0.630),我很难让它看到我的存根文件.谁能告诉我这里有什么问题: 我的目录结构如下所示: ├── caesar.py └── stubs └── caesar.pyi ca ...

  7. 替代密码的c语言程序,替代密码及置换密码的C语言实现.doc

    WORD完美格式 技术资料 专业整理 实验一 一.实验名称:替代密码和置换密码的实现 二.实验目的:通过编程实现替代密码算法和置换密码算法,加深对古典密码体系的了解,为以后深入学习密码学奠定基础. 三 ...

  8. 【2021-11-08 更新】【梳理】简明操作系统原理 第二十章 加密(docx)

    配套教材: Operating Systems: Three Easy Pieces Remzi H. Arpaci-Dusseau Andrea C. Arpaci-Dusseau Peter Re ...

  9. 攻防世界- CRYPTO -练习区12题解

    攻防世界- CRYPTO-新手区 一.base64 题目描述: 元宵节灯谜是一种古老的传统民间观灯猜谜的习俗. 因为谜语能启迪智慧又饶有兴趣,灯谜增添节日气氛,是一项很有趣的活动. 你也很喜欢这个游戏 ...

  10. Linux 4.13/4.14内核中带来的ULP(Upper Layer Protocol)

    序 过了一个很爽的国庆假期,跟小小的小男朋友家长一起回其老家尝到了潮汕美食,南澳岛捕鱼捕虾,海鲜撑到爆,回到深圳次日小小另一个小朋友家长又带我们到东莞长安尝到了正宗的恩施土家菜,几天下来喝了几顿爽酒, ...

最新文章

  1. 德州农工大学 计算机排名,德州农工大学美国大学排名及专业排名汇总(USNEWS美国大学排名版)...
  2. avcodec_receive_packet 11
  3. R语言问题剖析20篇(一)-R语言泛函式编程purrr实现优雅循环迭代
  4. %matplotlib inline 是什么意思
  5. 计算机组成原理实验八报告,计算机组成原理实验八报告
  6. Manacher【p1210】回文检测
  7. 实现spring mvc流程
  8. 前端:JS/17/前篇总结(JS程序的基本语法,变量),数据类型-变量的类型(数值型,字符型,布尔型,未定义型,空型),数据类型转换,typeof()判断数据类型,从字符串提取整数或浮点数的函数
  9. NumSharp  - Numerical .NET
  10. lintcode 168. 吹气球 动态规划
  11. 奇异值分解(SVD)(2)
  12. Python数据可视化:5种绘制柱状图表的方法(附源码)
  13. Recylerview刷新图片闪烁
  14. turtle画等腰三角形
  15. 找单生狗,模拟atoi,模拟offsetof,交换奇偶位
  16. mysql 数据横向拼接_Mysql 合并结果接横向拼接字段
  17. SBUF数据缓冲寄存器
  18. (转)跳一跳带火了小程序后 微信小程序电商的路越来越难走了!
  19. java左右摇摆_java – 按边缘排列摇摆组件
  20. python安装ipython出现警告和错误怎么解决_ipython在最新python版本中出现事件循环问题...

热门文章

  1. Layer 开启与关闭加载层
  2. 在指定字符串后面插入字符串
  3. 洛谷P3533 [POI2012]RAN-Rendezvous
  4. 许可协议html,许可协议
  5. Leetcode--Java--212. 单词搜索 II
  6. 深度学习中 GPU 和显存分析
  7. MySQL数据导出:ERROR 1 (HY000) 错误解决
  8. 第3讲 移动通信技术
  9. Android裁剪系统
  10. 这位日本网友和谷歌街景的故事,感动了58万人