代码其实比较简单,最主要是的好好看书,好好理解流程。

package com.slp.cryptography.des;/*** @ClassName DesSubKey* @Description TODO* @Author sanglp* @Date 2021/1/11 13:18* @Version 1.0**/
public class DesSubKey {public static void main(String[] args) {int a[] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1};int b[] = new int[56], i, j, n, t, x, y;int C[] = new int[56];int D[] = new int[56];int k[] = new int[56];//进行第一轮置换b[0] = a[56];b[1] = a[48];b[2] = a[40];b[3] = a[32];b[4] = a[24];b[5] = a[16];b[6] = a[8];b[7] = a[0];b[8] = a[57];b[9] = a[49];b[10] = a[41];b[11] = a[33];b[12] = a[25];b[13] = a[17];b[14] = a[9];b[15] = a[1];b[16] = a[58];b[17] = a[50];b[18] = a[42];b[19] = a[34];b[20] = a[26];b[21] = a[18];b[22] = a[10];b[23] = a[2];b[24] = a[59];b[25] = a[51];b[26] = a[43];b[27] = a[35];b[28] = a[62];b[29] = a[54];b[30] = a[46];b[31] = a[38];b[32] = a[30];b[33] = a[22];b[34] = a[14];b[35] = a[6];b[36] = a[61];b[37] = a[53];b[38] = a[45];b[39] = a[37];b[40] = a[29];b[41] = a[21];b[42] = a[13];b[43] = a[5];b[44] = a[60];b[45] = a[52];b[46] = a[44];b[47] = a[36];b[48] = a[28];b[49] = a[20];b[50] = a[12];b[51] = a[4];b[52] = a[27];b[53] = a[19];b[54] = a[11];b[55] = a[3];// for(i=0;i<56;i++)// {//printf("%d ",b[i]);//}//printf("\n");//输出C0 D0System.out.print("C0=");for (i = 0; i < 28; i++) {C[i] = b[i];if (i % 4 == 0) {System.out.print("  ");}System.out.print(C[i]);}System.out.print("\nD0=");for (i = 28; i < 56; i++) {D[i - 28] = b[i];if (i % 4 == 0) {System.out.print("  ");}System.out.print(D[i - 28]);}System.out.print("\n\n");//置换16次for (j = 1; j <= 16; j++) {System.out.println("第"+j+"次子秘钥");if (j == 1 || j == 2 || j == 9 || j == 16) {n = C[0];t = D[0];for (i = 0; i < 27; i++) {C[i] = C[i + 1];D[i] = D[i + 1];}C[27] = n;D[27] = t;} else {n = C[1];t = C[0];x = D[1];y = D[0];for (i = 0; i < 26; i++) {C[i] = C[i + 2];D[i] = D[i + 2];}C[27] = n;C[26] = t;D[27] = x;D[26] = y;}for (i = 0; i < 28; i++) {if (i % 4 == 0) {System.out.print("  ");}System.out.print(C[i]);}System.out.print("\n");for (i = 0; i < 28; i++) {if (i % 4 == 0) {System.out.print("  ");}System.out.print(D[i]);}System.out.print("\n");for (i = 0; i < 28; i++) {b[i] = C[i];}for (i = 28; i < 56; i++) {b[i] = D[i - 28];}k[0] = b[13];k[1] = b[16];k[2] = b[10];k[3] = b[23];k[4] = b[0];k[5] = b[4];k[6] = b[2];k[7] = b[27];k[8] = b[14];k[9] = b[5];k[10] = b[20];k[11] = b[9];k[12] = b[22];k[13] = b[18];k[14] = b[11];k[15] = b[3];k[16] = b[25];k[17] = b[7];k[18] = b[15];k[19] = b[6];k[20] = b[26];k[21] = b[19];k[22] = b[12];k[23] = b[1];k[24] = b[40];k[25] = b[51];k[26] = b[30];k[27] = b[36];k[28] = b[46];k[29] = b[54];k[30] = b[29];k[31] = b[39];k[32] = b[50];k[33] = b[44];k[34] = b[32];k[35] = b[47];k[36] = b[43];k[37] = b[48];k[38] = b[38];k[39] = b[55];k[40] = b[33];k[41] = b[52];k[42] = b[45];k[43] = b[41];k[44] = b[49];k[45] = b[35];k[46] = b[28];k[47] = b[31];for (i = 0; i < 48; i++) {if (i % 4 == 0) {System.out.print(" ");}System.out.print(k[i]);}System.out.print("\n");System.out.print("\n");}}
}

微信搜一搜【梓莘】或扫描下方二维码交个朋友共同进步。文章持续更新中。目前在整理python百战学习笔记,期待后续更多的更新哦。

【密码学原理与实践】DES构建子秘钥 符java代码实现相关推荐

  1. 【密码学原理与实践】(六)置换密码 符java代码实现

    置换密码 置换密码与前面的代换密码是不一样的,置换密码是保持明文的所有字母不变,只是利用置换打乱了明文字母的位置和次序. 首先需要明白,置换既是单射又是满射 定义 令m为一正整数,P=C= ( Z 2 ...

  2. 【密码学原理与实践】(四)维吉尼亚密码 符java代码实现

    维吉尼亚密码(Vigenere Cipher) 转载请著明出处 无论是移位密码还是代换密码,一旦秘钥被选定,则每个字母对应的数字都被加密变换成对应的唯一数字.我们称这种为单表代换密码,而本篇讲的是一种 ...

  3. 密码学原理与实践_到底什么是防火墙入侵检测密码学身份认证?如何高效建立网络安全知识体系?...

    今天杰哥给大家推荐一本新的书籍,名字叫做<网络安全原理与实践>,这本书有一定的阅读门槛,不是一本面向新手或新人的书籍,至少需要你具备网络基础的功底,例如已学习并掌握了我前面推荐的两本书了. ...

  4. 密码学原理与实践第三版pdf_云计算原理与实践PDF电子书下载

    今天分享的电子书是<云计算原理与实践>PDF电子书下载 本书细节 书名:<云计算原理与实践> 作者:王伟主编:郭栋,张礼庆,邱娟,张静轩,张东启,谭一鸣编著 出版时间:2018 ...

  5. 【密码学原理与实践】(二)代换密码 符java代码实现

    代换密码(Substitution Cipher) 转载请著明出处 定义 令P=C=Z26,K是由26个数字0,1,-25的所有可能的置换组成,对任意的π∈K,定义eπ(x)=π(x)和dπ(y)=π ...

  6. 【密码学原理与实践】(一)移位密码 附java代码实现

    移位密码(Shift Cipher) 转载请著名出处 密码体制 一个密码体制是满足以下条件的五元组(P,C,K,E,D) P表示所有可能的明文组成的有限集 C表示所有可能的密文组成的有限集 K表示秘钥 ...

  7. 【密码学原理与实践】(三)仿射密码 符java代码实现

    仿射密码(Affine Cipher) 转载请著明出处 仿射密码是代换密码的一种特殊情况. 在学习仿射密码之前我们首先需要了解几个定理 定理 同余方程唯一解定理 设a ∈ Zm,对任意的b∈Zm,同余 ...

  8. java 创建ssh用户秘钥,安装Java、Maven、Git,以及生成、拷贝密钥

    安装Java.Maven.Git,以及生成.拷贝密钥. 整个过程可以用root用户操作,但为了使部署脚本对普通用户可用,需要注意调整文件的权限. 这里以10.56.69.165为部署服务器,10.56 ...

  9. 密码学原理与实践第三版pdf_喜报!Nervos 研究员 Alan 论文被国际密码学顶会欧密会收录...

    近日,Nervos 基金会密码学研究员 Alan Szepieniec 的论文<Transparent SNARKs from DARK Compilers>被国际密码学顶会欧密会收录,同 ...

最新文章

  1. 使用CV2和Keras OCR从图像中删除文本
  2. Underlying cause: com.mysql.cj.jdbc.exceptions.CommunicationsException : Communications link failure
  3. 代码 | 一天一点代码坏味道(1)
  4. 【学习笔记】第二章——管程(解决生产者消费者问题、封装、Java 体现)
  5. ECShop 安装问题 谁能帮帮我
  6. mysql 8.0 安装_安装MySQL-8.0.19
  7. ZPL指令打印 斑马打印机指令打印
  8. 数据结构电视大赛投票系统
  9. python找到最大最小值、最大最小值的位置、删除最大值最小值
  10. 安全认证框架之Shiro详解
  11. 鲍威尔共轭方向法c语言程序,鲍威尔共轭方向法VB源程序
  12. 一:评分卡模型分数计算
  13. 做一名「技术掮客」去变现自己的技术
  14. 黑苹果Win与Mac时间同步工具
  15. 计算机词汇怎么背,如何背诵英语词汇更有效?
  16. 视频编码之I帧、P帧、B帧
  17. 使用git进行版本控制
  18. 眼图测试(信号完整性测试)-嵌入式多媒体卡eMMC存储芯片
  19. RDIFramework.NET敏捷开发框架助力企业BPM业务流程系统的开发与落地
  20. 拼多多2亿美元战略投资国美,家电市场将会如何变化?

热门文章

  1. BZOJ2085 : [Poi2010]Hamsters
  2. 【Kafka】Kafka消费者组三种分区分配策略roundrobin,range,StickyAssignor
  3. wireshark分析tcp,rtp
  4. 两种方法计算斐波那契数列第n项
  5. 别让妈妈生气——浅谈长者用户
  6. c++输出文件流ofstream用法详解
  7. Android开发单选按钮功能,Android单选按钮RadioButton的使用详解
  8. iphone ios layer 教程应用
  9. java+mysql 基于ssm的网上甜品店系统
  10. 信息时代与大数据相关的8个专业