`

加密相关的一些方法

阅读更多

(1)求两个字节数组的异或

/***
	 * 求异或.
	 * 
	 * @param strOldHex  : hex string
	 * @param strKeyHex  : hex string
	 * @return
	 */
	public static byte[] xOR(String strOldHex, String strKeyHex) {
		byte[] oldBytes = ByteStringUtil.hexString2Bytes(strOldHex);
		byte[] keyBytes = ByteStringUtil.hexString2Bytes(strKeyHex);
		byte[] xorResult = new byte[oldBytes.length];
		int keyIndex = 0;
		for (int x = 0; x < oldBytes.length; x++) {
			xorResult[x] = (byte) (oldBytes[x] ^ keyBytes[keyIndex]);
			if (++keyIndex == keyBytes.length) {
				keyIndex = 0;
			}
		}
		return xorResult;
	}

 测试如下:

@Test
	public void test_XOR() {
		String strOldHex = "8080";
		String strKeyHex = "8182";
		byte[]xorResult=CustomMACUtil.xOR(strOldHex, strKeyHex);
		
		System.out.println("---------------");
		System.out.println(ByteStringUtil.byteArrayToHexString(xorResult));
	}

 运行结果:

0102

注意:上述方法的参数是十六进制位串

(2)CBC加密

/**
	 * 加密函数
	 * 
	 * @param data
	 *            加密数据
	 * @param key
	 *            密钥
	 * @param iv 
	 * @return 返回加密后的数据
	 */
	public static byte[] desCBCEncrypt(byte[] data, byte[] key, byte[] iv) {
		try {
			// 从原始密钥数据创建DESKeySpec对象
			DESKeySpec dks = new DESKeySpec(key);

			// 创建一个密匙工厂,然后用它把DESKeySpec转换成
			// 一个SecretKey对象
			SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
			SecretKey secretKey = keyFactory.generateSecret(dks);

			// Cipher对象实际完成加密操作
			// Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
			// 若采用NoPadding模式,data长度必须是8的倍数
			Cipher cipher = Cipher.getInstance("DES/CBC/NoPadding");

			// 用密匙初始化Cipher对象
			IvParameterSpec param = new IvParameterSpec(iv);
			cipher.init(Cipher.ENCRYPT_MODE, secretKey, param);

			// 执行加密操作
			byte encryptedData[] = cipher.doFinal(data);

			return encryptedData;
		} catch (Exception e) {
			System.err.println("DES-CBC算法,加密数据出错!");
			e.printStackTrace();
		}

		return null;
	}

 测试如下:

@Test
	public void test_desCBCEncrypt() {
		String data2 = "03DA9F790A007A1Fe49309DA148F5c00";
		String leftHalf = "1b03aa6415bb0a54";
		byte[] macResultBytes;
		macResultBytes = DESUtil.desCBCEncrypt(
				ByteStringUtil.hexString2Bytes(data2),
				ByteStringUtil.hexString2Bytes(leftHalf), new byte[8]);
		System.out.println(ByteStringUtil.byteArrayToHexString(macResultBytes));
	}

 运行结果:

9a3fa1e6957f79dbad799659880af8e6

 注意:上述加密不是普通的DES加密

 

(3)DES3加密

// keybyte为加密密钥,长度为24字节
	// src为被加密的数据缓冲区(源)
	public static byte[] encryptMode(byte[] src, byte[] keybyte) {
		try {
			// 如果加密密钥的长度为16个字节,则把开始的8个字节补到最后变成24个字节
			if (keybyte.length == 16) {
				String newKeybyte = ByteStringUtil.byteArrayToHexString(keybyte);
				String newKeybyte1 = newKeybyte + newKeybyte.substring(0, 16);
				keybyte = ByteStringUtil.hexString2Bytes(newKeybyte1);
			}
			// 生成密钥
			SecretKey deskey = new SecretKeySpec(keybyte, "DESede");
			final IvParameterSpec iv = new IvParameterSpec(new byte[8]);
			// 加密
			Cipher c1 = Cipher.getInstance("DESede/CBC/PKCS5Padding");
			c1.init(Cipher.ENCRYPT_MODE, deskey,iv);
			return c1.doFinal(src);
		} catch (java.security.NoSuchAlgorithmException e1) {
			e1.printStackTrace();
		} catch (javax.crypto.NoSuchPaddingException e2) {
			e2.printStackTrace();
		} catch (java.lang.Exception e3) {
			e3.printStackTrace();
		}
		return null;
	}

 

0
0
分享到:
评论

相关推荐

    Java实现url加密处理的方法示例

    这两个方法分别执行加密和解密操作,其中`getEncString()`使用Base64编码加密后的数据,而`getDesString()`则先Base64解码,然后再解密。 5. **安全性考虑**:虽然示例代码提供了基本的加密功能,但它没有涵盖所有...

    基于深度学习的联合变换相关器光学图像加密系统去噪方法.pdf

    基于深度学习的联合变换相关器光学图像加密系统去噪方法 摘要:本文提出了一种基于深度学习的联合变换相关器(JTC)光学图像加密系统新型去噪方法。该方法设计了一种基于生成对抗网络的去噪框架,使用密集模块加强...

    论文研究-基于区域相关的图像加密效果评定方法.pdf

    随着图像加密技术的发展,出现了各种各样的加密方法,其中有基于Arnold变换、仿射变换、...提出了一种新的基于区域相关的判断置乱程度的方法。实验结果表明该方法能有效衡量置乱程度及反映加密次数与置乱程度的关系。

    手动加密文件方法,加密文件夹

    本文将深入探讨“手动加密文件方法,加密文件夹”这一主题,涵盖在DOS环境下如何进行手动加密操作,以及相关的知识点。 ### 手动加密文件与文件夹的重要性 在日常工作中,我们可能需要存储各种类型的文件,包括但...

    asp.net微软提供的加密方法.rar

    ASP.NET是微软开发的一款用于构建Web应用程序的框架,它提供了丰富的功能和工具,其中包括安全性的加密方法。在ASP.NET中,加密技术对于保护敏感数据、确保通信安全以及防止数据篡改至关重要。本压缩包文件“asp.net...

    使用MD5进行加密的使用方法和程序

    `MD5`类定义了一些基本的方法和属性,如`ComputeHash`方法,用于计算输入数据的哈希值。由于MD5算法是抽象的,所以你需要使用它的具体实现,如`System.Security.Cryptography.MD5CryptoServiceProvider`,来实际执行...

    BAT批处理脚本-加密解密-U盘做加密狗.zip

    "BAT批处理脚本-加密解密-U盘做加密狗.zip"这个压缩包就包含了一个与加密解密相关的批处理脚本,用于利用U盘作为加密狗进行数据保护。 首先,我们来理解什么是批处理脚本(BAT文件)。批处理文件是基于DOS或Windows...

    java密码加密方法

    在构造函数中,通过调用`getKey`方法生成密钥对象,并利用`Cipher`类实例化加密和解密操作对象,分别对应`Cipher.ENCRYPT_MODE`和`Cipher.DECRYPT_MODE`模式。 5. **加密和解密方法** `encrypt`和`decrypt`方法...

    基于同态加密的区块链数据安全传输方法研究.pdf

    基于同态加密的区块链数据安全...* 开发基于同态加密的区块链数据安全传输方法的相关工具和平台,以方便用户使用。 本文设计的基于同态加密的区块链数据安全传输方法可以满足实际传输需要,保护数据的安全和完整性。

    电脑中文件加密的方法

    2. 当打开加密文件时,显示“拒绝访问”消息:因为加密文件系统(EFS)使用公钥证书对文件加密,与该证书相关的私钥在本计算机上不可用。解决方案是查找合适的证书的私钥,并使用证书管理单元将私钥导入计算机并在本机...

    读写加密狗,加密狗数据写入和读取,C#

    这个类可能包含`Initialize`方法来设置连接到加密狗,`Write`方法用于写入数据,`Read`方法用于读取数据,以及`Close`方法来断开连接。这些方法内部会调用驱动程序提供的API函数。 在实际应用中,数据的加密和解密...

    关系数据库中字符数据的保序加密方法.pdf

    在介绍该方法之前,文章首先回顾了对数值型数据保持顺序加密的相关研究,并在此基础上提出了面向字符数据的保序加密方案。随着信息技术的快速发展,数据安全成为了各行业关注的重点之一。传统的数据库管理系统提供的...

    有多种加密方法的控件

    "有多种加密方法的控件"这一标题暗示了我们讨论的是一个支持多种加密算法的组件或库,这种控件通常用于开发安全软件,例如防止未授权访问、保护用户隐私或实现安全通信。在描述中提到的“可生成验证码”,进一步说明...

    javascript将url中的参数加密解密代码

    让我们深入了解一下这段代码的工作原理和相关知识点。 首先,我们有两个主要的函数:`Encrypt` 和 `Decrypt`。`Encrypt` 函数用于加密URL参数,而 `Decrypt` 函数则用于解密已加密的数据。 1. **加密过程**: - ...

    云计算环境下海量通信信息无损加密方法研究.pdf

    云计算环境下海量通信信息无损加密方法研究: 随着云计算技术的迅猛发展,信息处理速度和效率得到了极大的提升,随之而来的信息安全问题也日益突出。在海量通信信息传输和存储过程中,确保数据的完整性和隐私性是...

    C#简单加密解密方法

    本篇将详细探讨如何利用C#进行简单的字符加密和解密,以及相关的ASCII编码知识。 首先,我们要了解ASCII码,它是美国标准信息交换代码的缩写,定义了128个字符的编码,包括英文大小写字母、数字、标点符号和控制...

    安全加密软件U盘加密,文件加密

    本文将深入探讨“安全加密软件”用于U盘加密和文件加密的相关知识点。 首先,我们要理解加密的基本原理。加密是一种将原始数据(明文)转化为不可读形式(密文)的过程,这通常通过使用加密算法和密钥来完成。当...

    c# 加密和解密相关代码

    到加密的话题,一些读者一定非常感兴趣,而且会联想到复杂的加密 算法,本实例主要使用异或“^”运算符简单地实现了对数字加密的 功能。实例运行效果如图19.1 所示。 关 键技术 本实例实现时主要使用了“异或”...

    电子信息保密通信传输链加密方法改进研究.pdf

    电子信息保密通信传输链加密方法改进研究 本文研究了电子信息保密通信传输链加密方法的改进,旨在解决传统加密方法的不足之处。传统的通信模式中,将信息调制在发射机的周期载波上,在加密的过程中通常采用数值计算...

Global site tag (gtag.js) - Google Analytics