DES算法作业 Java实现

广东工业大学 信息安全概论

  1. 网上搜索DES的源代码。
  2. 利用DES源代码实现下面功能:
    ① 统计DES算法在密钥固定情况,输入明文改变1位、2位,。。。64位时。输出密文位数改变情况。
    ② 统计DES算法在明文固定情况,输入密钥改变1位、2位,。。。64位时。输出密文位数改变情况。
  3. 注:为了具有客观性,①,②小题需要对多次进行统计,并计算其平均值。
package SymmetricEncryption;

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/*
 * @author Riyad
 */
public class DES
{
   
	public static void main(String[] args)
	{
   
		//密钥
		byte[] des_key = new byte[8];

		//明文
		byte[] des_input = new byte[8];
		
		System.out.println("The default plaintext is 1111111111111111");
		System.out.println("The default key is 1111111111111111");

		//默认明文为1111111111111111
		//默认密钥为1111111111111111
		for (int i = 0; i < 8; i++)
		{
   
			des_key[i] = 0x11;
			des_input[i] = 0x11;
		}
		
		//加密后的密文为F40379AB9E0EC533
		byte[] des_output = encrypt(des_key, des_input);
		
		//输出加密结果
		System.out.println("The cipher text is " + byteArrayToHex(des_output));
		
		System.out.println("------------------------------------------");
		
		BitsArray key = new BitsArray(des_key);
		BitsArray input = new BitsArray(des_input);
		BitsArray output = new BitsArray(des_output);
		
		//选择想改变位数的是明文或者密钥(当输入其他数值时自动终止程序)
		System.out.print("Please enter which one you want to change (1.Plaintext 2.Key): ");
		Scanner scan1 = new Scanner(System.in);
		int select = scan1.nextInt();
		if(select > 2 || select < 1)
		{
   
			System.out.println("Please enter the correct number!");
			System.exit(0);
		}
		
		/*
		//输入想改变的位数(当超出范围时自动终止程序)
		System.out.print("Please enter how many bits you want to change (1 <= bits <= 64): ");
		Scanner scan2 = new Scanner(System.in);
		int bits = scan2.nextInt();
		if(bits > 64 || bits < 1)
		{
			System.out.println("Please enter correct number!");
			System.exit(0);
		}
		*/
		
		if(select == 1)
		{
   
			//分别计算改变1~64位时的平均改变位数并输出
			for(int bits = 1; bits <= 64; bits++)
			{
   
				int count = 0; //记录总改变的位数的数量
				
				//总共进行十次测试
				for(int j = 0; j < 10; j++)
				{
   	
					//利用Set中元素不能重复的特性随机得到要修改位所在的位置
					HashSet
  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值