栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

统计DES算法在密钥、明文固定下对密文的影响

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

统计DES算法在密钥、明文固定下对密文的影响

统计DES算法在密钥、明文固定下对密文的影响

实验代码在这里:实验代码

实验目的
  1. 统计DES算法在密钥固定情况,输入明文改变1位、2位,。。。64位时。输出密文位数改变情况。
  2. 统计DES算法在明文固定情况,输入密钥改变1位、2位,。。。64位时。输出密文位数改变情况。
    为了具有客观性,各小题需要对多次进行统计,并计算其平均值。
实验过程 数据结构

主要使用字符串String和字节数组byte[]
主要有5个变量,对于第一问:统计DES算法在密钥固定情况,主要变量是:

明文des_input
密文des_output
改变后的明文randDes_input
改变后的密文randDes_output
密钥des_key

上述5个变量分别都有字符串和byte[] 两种形式,字符串是以二进制形式存储,用于比对不同和随机改变位数;byte[]用于加密。

第二问同样。

过程简述

其实逻辑是很简单的啦,主要是数据形式的转换而已。

这里就不讲了。

实验结果 改变明文,固定密钥情况如下:

改变明文,固定密钥情况如下:
平均每变化1位,密文变化25.4位
平均每变化2位,密文变化27.9位
平均每变化3位,密文变化26.8位
平均每变化4位,密文变化29.2位
平均每变化5位,密文变化30.2位
平均每变化6位,密文变化27.7位
平均每变化7位,密文变化26.1位
平均每变化8位,密文变化28.1位
平均每变化9位,密文变化28.1位
平均每变化10位,密文变化29.2位
平均每变化11位,密文变化30.2位
平均每变化12位,密文变化29.8位
平均每变化13位,密文变化29.0位
平均每变化14位,密文变化27.5位
平均每变化15位,密文变化28.1位
平均每变化16位,密文变化30.2位
平均每变化17位,密文变化27.9位
平均每变化18位,密文变化26.6位
平均每变化19位,密文变化27.2位
平均每变化20位,密文变化29.4位
平均每变化21位,密文变化26.9位
平均每变化22位,密文变化28.6位
平均每变化23位,密文变化27.1位
平均每变化24位,密文变化26.4位
平均每变化25位,密文变化27.6位
平均每变化26位,密文变化28.1位
平均每变化27位,密文变化28.4位
平均每变化28位,密文变化28.5位
平均每变化29位,密文变化25.7位
平均每变化30位,密文变化29.4位
平均每变化31位,密文变化28.8位
平均每变化32位,密文变化27.2位
平均每变化33位,密文变化30.3位
平均每变化34位,密文变化27.9位
平均每变化35位,密文变化27.1位
平均每变化36位,密文变化29.3位
平均每变化37位,密文变化29.8位
平均每变化38位,密文变化29.9位
平均每变化39位,密文变化27.5位
平均每变化40位,密文变化26.7位
平均每变化41位,密文变化26.4位
平均每变化42位,密文变化29.0位
平均每变化43位,密文变化27.4位
平均每变化44位,密文变化28.8位
平均每变化45位,密文变化29.5位
平均每变化46位,密文变化27.6位
平均每变化47位,密文变化27.5位
平均每变化48位,密文变化27.4位
平均每变化49位,密文变化27.4位
平均每变化50位,密文变化27.2位
平均每变化51位,密文变化26.3位
平均每变化52位,密文变化29.2位
平均每变化53位,密文变化26.5位
平均每变化54位,密文变化28.4位
平均每变化55位,密文变化28.6位
平均每变化56位,密文变化28.6位
平均每变化57位,密文变化27.6位
平均每变化58位,密文变化30.3位
平均每变化59位,密文变化30.5位
平均每变化60位,密文变化29.5位
平均每变化61位,密文变化27.1位
平均每变化62位,密文变化28.6位
平均每变化63位,密文变化26.9位
平均每变化64位,密文变化27.3位

固定明文,改变密钥情况如下:

平均每变化1位,密文变化25.1位
平均每变化2位,密文变化28.0位
平均每变化3位,密文变化28.2位
平均每变化4位,密文变化26.0位
平均每变化5位,密文变化26.8位
平均每变化6位,密文变化28.3位
平均每变化7位,密文变化27.6位
平均每变化8位,密文变化29.0位
平均每变化9位,密文变化27.9位
平均每变化10位,密文变化25.7位
平均每变化11位,密文变化29.0位
平均每变化12位,密文变化27.9位
平均每变化13位,密文变化27.6位
平均每变化14位,密文变化27.8位
平均每变化15位,密文变化27.5位
平均每变化16位,密文变化27.0位
平均每变化17位,密文变化27.4位
平均每变化18位,密文变化26.1位
平均每变化19位,密文变化28.0位
平均每变化20位,密文变化27.4位
平均每变化21位,密文变化27.8位
平均每变化22位,密文变化26.6位
平均每变化23位,密文变化29.8位
平均每变化24位,密文变化27.5位
平均每变化25位,密文变化29.7位
平均每变化26位,密文变化28.0位
平均每变化27位,密文变化26.8位
平均每变化28位,密文变化28.5位
平均每变化29位,密文变化25.4位
平均每变化30位,密文变化28.4位
平均每变化31位,密文变化29.8位
平均每变化32位,密文变化27.4位
平均每变化33位,密文变化28.3位
平均每变化34位,密文变化26.2位
平均每变化35位,密文变化26.5位
平均每变化36位,密文变化28.0位
平均每变化37位,密文变化26.0位
平均每变化38位,密文变化27.8位
平均每变化39位,密文变化28.6位
平均每变化40位,密文变化29.1位
平均每变化41位,密文变化27.2位
平均每变化42位,密文变化28.6位
平均每变化43位,密文变化28.7位
平均每变化44位,密文变化26.5位
平均每变化45位,密文变化29.6位
平均每变化46位,密文变化30.5位
平均每变化47位,密文变化30.2位
平均每变化48位,密文变化28.2位
平均每变化49位,密文变化28.2位
平均每变化50位,密文变化26.4位
平均每变化51位,密文变化28.6位
平均每变化52位,密文变化27.7位
平均每变化53位,密文变化29.4位
平均每变化54位,密文变化26.0位
平均每变化55位,密文变化27.0位
平均每变化56位,密文变化27.1位
平均每变化57位,密文变化27.2位
平均每变化58位,密文变化27.8位
平均每变化59位,密文变化28.6位
平均每变化60位,密文变化28.6位
平均每变化61位,密文变化28.9位
平均每变化62位,密文变化29.2位
平均每变化63位,密文变化27.8位
平均每变化64位,密文变化29.8位

主要函数

主函数:

	public static void changeCipher(byte[] des_key,byte[] des_input,byte[] des_output)
	
	public static void changeInput(byte[] des_key,byte[] des_input,byte[] des_output)

新建类BitsArray,主要使用的静态方法:

	public static String ByteArrayToHex(byte[] bs)
	
	public static byte[] binaryToByteArray(String inHex)
	
	
	public static int compare(String output1,String output2)
	
	
	public static String bitsToString(byte[] bs)
	
		
	public static String toggleStringBit(String str,int number)
麻烦的地方

麻烦的地方在于怎么选择数据形式,byte[]不方便改变位数,string不方便进行加密,所以做了很多工具函数用于把byte[]和string格式的转换。
转换主要是把以string形式存储的64位二进制转成byte[8],8位二进制对应一个byte。这就出现了一个问题,如果一个二进制数是11000000,转成byte就是一个负数,byte再转成String,那么它就不再是8位,可能是16位,24位(java使用Integer.toBinaryString()可以试一下)。这就造成了麻烦。

解决方法
**
 * 把字节数组转换成字符串
 * @param bs
 * @return
 */
	public static String bitsToString(byte[] bs) {
		String str="";
//		这里的8是因为一位byte有8位
		for(int i=0;i<8;i++)
		{
			if(bs[i]<0) {
// 在转换的时候先鉴别是否是负数,如果是,就加上128转成正数(128:2^8)机器码的知识
//这样解决了存进来是负数,换出去位数不能控制的问题
				bs[i]+=128;
			}
			String s=Integer.toBinaryString(bs[i]);
			if(s.length()<8) {
				int total=8-s.length();
				for(int j=0;j
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/328699.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号