HDU密码学-SM4(Java实现,仅针对输入为16进制128bit的明文和密钥)

这篇具有很好参考价值的文章主要介绍了HDU密码学-SM4(Java实现,仅针对输入为16进制128bit的明文和密钥)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验名称:SM4密码实验

二、实验要求:

1、熟悉分组密码的基本框架。
2、掌握SM4密码的加解密原理。
3、用合适的编程语言实现SM4密码程序并输出结果。

三、实验内容:

SM4算法是我国商用密码标准,其前身是SMS4算法。SM4算法是一个分组加密算法,分组长度和密钥长度均128bit。SM4算法使用32轮的非线性迭代结构。SM4在最后一轮非线性迭代之后加上了一个反序变换,因此SM4中只要解密密钥是加密密钥的逆序,它的解密算法与加密算法就可以保持一致。SM4的主体运算是非平衡Feistel网络。整体逻辑结构如图1所示,经过32轮变换把明文变换为密文。
sm4 requires a 128 bit key,算法
其中密钥扩展运算把128 bit的种子密钥扩展为32个32 bit的子密钥。下面分别介绍轮函数、密钥扩展和加解密。

1. 轮函数

轮函数的规则由
sm4 requires a 128 bit key,算法
给出,其中i = 0,1,…31。第i轮的输入为:
sm4 requires a 128 bit key,算法
输出为:
sm4 requires a 128 bit key,算法
第一轮的输入:
sm4 requires a 128 bit key,算法
即为128 bit明文的四个分组,最后一轮的输出:
sm4 requires a 128 bit key,算法
再经过逆序,得到了密文为:
sm4 requires a 128 bit key,算法
下图即为轮函数的结构。
sm4 requires a 128 bit key,算法
SM4算法的合成置换T是可逆置换。T置换是由一个非线性变换和一个线性扩散变换L复合而成,T置换的过程如下图所示:
sm4 requires a 128 bit key,算法

非线性变换由四个S盒并行组成。不同于DES等分组密码算法,SM4算法中的这四个S盒实际上是同一个8 bit —> 8bit的S盒,详见下表:
sm4 requires a 128 bit key,算法
其中左边的列表示8 bit输入的高位部分,上方的行表示8 bit输入的低位部分。
非线性变换的输出是线性变换L的输入,设L的输入为,输出为,则
sm4 requires a 128 bit key,算法
其中B<<<n表示B循环左移n位。

2. 密钥扩展

在密钥扩展方案中,种子密钥经过扩展生成32个轮密钥,每个轮密钥长度为32bit。首先,128 bit的种子密钥SK分为四组,再给定系统参数FK = (FK0, FK1, FK2, FK3) = { 0xa3b1bac6, 0x56aa3350, 0x677d9197, 0xb27022dc};与固定参数(其中),密钥扩展规则如下:
sm4 requires a 128 bit key,算法
其中i = 0,1,2,…31用于生成共32个轮密钥。T’变换与加密算法轮函数中的变换除线性变换L不同外,其他相同。T’变换中的线性变换L’为
.sm4 requires a 128 bit key,算法

3. 加解密

加密与解密的轮函数结构完全相同,唯一的区别是解密密钥是加密密钥的逆序。加密轮密钥的使用顺序为RK0,…,RK31,解密时轮密钥的使用顺序为RK31,…,RK0。文章来源地址https://www.toymoban.com/news/detail-578286.html

4.主要步骤

1)新建一个空项目,取名sm4。

2)在左边的解决方案资源管理器中添加java文件,取名为sm4.java。

3)在SM4中,32bit可用一个整型(int)变量表示,128bit可用长度为4的整型数组表示。

4)在sm4.java中先写入

Int[] RK = new int[32];    //32轮轮密钥, 每个RKi为32bit
Int[] K = new int[36];     //在密钥扩展中使用, 一共36组, 每个Ki为32bit
Char[] S_Box = {
              //S盒,输入8bit, 输出8bit
0xd6,0x90,0xe9,0xfe,0xcc,0xe1,0x3d,0xb7,0x16,0xb6,0x14,0xc2,0x28,0xfb,0x2c,0x05,
0x2b,0x67,0x9a,0x76,0x2a,0xbe,0x04,0xc3,0xaa,0x44,0x13,0x26,0x49,0x86,0x06,0x99,
0x9c,0x42,0x50,0xf4,0x91,0xef,0x98,0x7a,0x33,0x54,0x0b,0x43,0xed,0xcf,0xac,0x62,
0xe4,0xb3,0x1c,0xa9,0xc9,0x08,0xe8,0x95,0x80,0xdf,0x94,0xfa,0x75,0x8f,0x3f,0xa6,
0x47,0x07,0xa7,0xfc,0xf3,0x73,0x17,0xba,0x83,0x59,0x3c,0x19,0xe6,0x85,0x4f,0xa8,
0x68,0x6b,0x81,0xb2,0x71,0x64,0xda,0x8b,0xf8,0xeb,0x0f,0x4b,0x70,0x56,0x9d,0x35,
0x1e,0x24,0x0e,0x5e,0x63,0x58,0xd1,0xa2,0x25,0x22,0x7c,0x3b,0x01,0x21,0x78,0x87,
0xd4,0x00,0x46,0x57,0x9f,0xd3,0x27,0x52,0x4c,0x36,0x02,0xe7,0xa0,0xc4,0xc8,0x9e,
0xea,0xbf,0x8a,0xd2,0x40,0xc7,0x38,0xb5,0xa3,0xf7,0xf2,0xce,0xf9,0x61,0x15,0xa1,
0xe0,0xae,0x5d,0xa4,0x9b,0x34,0x1a,0x55,0xad,0x93,0x32,0x30,0xf5,0x8c,0xb1,0xe3,
0x1d,0xf6,0xe2,0x2e,0x82,0x66,0xca,0x60,0xc0,0x29,0x23,0xab,0x0d,0x53,0x4e,0x6f,
0xd5,0xdb,0x37,

到了这里,关于HDU密码学-SM4(Java实现,仅针对输入为16进制128bit的明文和密钥)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络安全】【密码学】【北京航空航天大学】实验一、数论基础(上)【C语言和Java实现】

    1、通过本次实验,熟悉相关的编程环境,为后续的实验做好铺垫; 2、回顾数论学科中的重要基本算法,并加深对其的理解,为本学期密码学理论及实验课程打下良好的基础。 数论主要研究的是整数的运算及性质,许多常用的加密算法都用到了数论知识。 本次实验的实验环

    2024年01月25日
    浏览(56)
  • 密码学【java语言】初探究

    本文章学自尚硅谷密码学课程,面对小白群体!!! 本文章仅用于学习和交流,禁止用于其他用途,如若存在侵权,请及时联系作者,作者会及时进行处理。 密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为

    2024年02月02日
    浏览(47)
  • 【密码学】Java课设-文件加密系统(适用于任何文件)

    文档显示乱码相信大家一定不陌生,一份很喜欢的文档内容/数据,下载到自己电脑上却是这样的 项目中一些核心程序打开是这样的 文件加密,不仅可以提高数据安全性,还可以在很大程度上保护个人权益/财产不被侵犯。 本篇文章采用的是对称加密方式,效果如下。 常见的

    2024年02月04日
    浏览(45)
  • 密码学【java】初探究加密方式之非对称加密

    非对称加密算法又称现代加密算法。非对称加密是计算机通信安全的基石,保证了加密数据不会被破解。 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey) 和私有密(privatekey) 公开密钥和私有密钥是一对。如果用公开密钥对数据进行加密,只有用对应的

    2024年02月03日
    浏览(49)
  • java生成一个符合密码学和安全性的随机秘钥

    有时 我们在生成token 或者完成某种加密形式时会需要一个秘钥 但是 有些时候 项目开发并没有规定用什么秘钥 但是 秘钥都是要有一定格式规范的 我们可以通过以下代码生成一个随机秘钥 重点是 这种一定会符合密码学和安全规范

    2024年02月07日
    浏览(39)
  • 【网络安全】【密码学】【北京航空航天大学】实验五、古典密码(中)【C语言实现】

    实验目的 和 原理简介 参见博客:古典密码(上) 1、弗纳姆密码(Vernam Cipher) (1)、算法原理 加密 原理: 加密过程可以用方程 ci = pi (+) ki 表示,其中 pi 是明文第 i 个二进制位, ki 是密钥第 i 个二进制位, ci 是密文第 i 个二进制位, (+) 是 异或 运算符。密文是通过对明

    2024年01月21日
    浏览(63)
  • 【网络安全】【密码学】【北京航空航天大学】实验四、古典密码(上)【C语言实现】

    1、 通过本次实验,了解古典加密算法的 主要思想 ,掌握 常见的 古典密码。 2、 学会 应用 古典密码,掌握针对部分古典密码的 破译方法 。 古典密码的编码方法主要有两种: 置换 和 代替 。 置换密码 重新排列明文中字符的顺序,不改变字符本身; 代替密码 不改变明文中

    2024年01月21日
    浏览(67)
  • 密码学之DES,3DES与Python实现AES

    最近项目中需要用到DES,3DES解密算法,所以了解一下。正好CSDN上有关于DES,3DES的资料。边看边写一下总结。 密码学之DES,3DES详解与Python实现 DES(Data Encryption Standard-数据加密标准)属于对称加密,即使用相同的密钥来完成加密和解密。分组长度为8个字节64bit(密钥每个字节的最

    2024年02月08日
    浏览(37)
  • DES的加密与解密(C语言实现)——大三密码学实验

    目录 DES的描述 Feistel体制 密钥扩展函数 F函数 总流程  代码 get函数的构建 yihuo函数的构建 fuck函数的构建 left_move函数的构建 exchange函数的构建 erzhuanshi函数的构建 shizhuaner函数的构建 s_box函数的构建 主函数的构建 总函数 运行结果示例 DES: 16 轮, Feistel 型结构 明文长度:

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包