`

加密相关的一些方法

阅读更多

(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加密处理的方法示例

    主要介绍了Java实现url加密处理的方法,涉及java基于base64、编码转换实现加密解密相关操作技巧,需要的朋友可以参考下

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

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

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

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

    c# 加密和解密相关代码

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

    文件夹和电脑磁盘的加密方法

    就是利用一些诸如“硬件狗”等这类工具进行相关的设定,使用计算机时必须使用这类硬件才能正常启动电脑和使用。 又如:微星公司为其主板专门设计的USB接口加密锁,只有当计算机插上这个加密锁之后,才能进操作系统...

    YT88外壳加密工具

    [加密方法] 1、首先要设置锁的普通算法,设置算法的过程可以参考我们的相关的演示 2、选择要加密的文件 3、选择要生成的新文件,生成的新文件不要与原要加密的文件名相同 4、点击保护,在弹出的框中选择或添加一...

    数据加密与多态加密综述

    通过介绍相关的密码学,数据加密以及基于公钥加密算法的方法与步骤,详细介绍了多态加密的原理与方法。

    利用C#实现SSLSocket加密通讯的方法详解

    主要给大家介绍了关于如何利用C#实现SSLSocket加密通讯的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    数据加密原理与实现方法

    无论是网络传输中使用的安全传输协议,还是安全手段或安全...不了解与此相关的加密原理和算法,就很难深刻地认识各种安全传输协议,以及实现网络安全所采用的数字凭证、数字签名等技术,所以我们在本节集中介绍一下。

    浩杰超级文件加密大师v7.5官方安装版

    浩杰超级文件加密大师是一款计算机上的文件加密解密工具,可以对所有文件进行加密,重要的文件一定要保护好就要加密,它采用了成熟先进的加密算法、加密方法和文件系统底层驱动,使文件加密和文件夹加密后的达到超高...

    论文研究-数据库加密字符串快速查询方法研究.pdf

    查询时使用两阶段查询策略,首先利用索引字段对加密数据进行一次粗糙查询以过滤掉与查询不相关的记录,然后在解密的数据上再进行一次精确查询,对粗糙查询结果进行二次过滤,得到符合查询条件的记录。实验表明,该...

    STM32芯片程序加密方法.doc

    开发人员一般设计软件加密方法:读id---复杂算法计算---对比之前存储的对应数据(与id相关)---判断芯片是否合法。 由于读id时很多人直接用id起始地址,例如0x1FFFF7E8,破解的人只要把这个数据改成0x8000020,并且0x...

    sql数据库相关加密知识

    加密算法是一些公式和法则,它规定了明文和密文之间的变换方法。密钥是控制加密算法和解密算法的关键信息,它的产生、传输、存储等工作是十分重要的。 数据加密的基本过程包括对明文(即可读信息)进行翻译,译成...

    MSS.rar_U盘加密_U盘加密c_U盘数据保护_U盘数据加密

    这里最简单的方法就是对设备加密,然后再解密,本源代码 就是一个与此相关的例子,对U盘数据加密,保护信息隐蔽,防止隐私泄露。本程序在运行时首先检测本地计算机的移动设备是否存在,然后选择移动设备,实现加密。

    云计算下支持语义的可搜索加密方法研究_杨清琳.pdf

    传统的云计算下的可搜索加密算法没有对查询关键词进行语义扩展,导致了用户查询意图与返回结果存在语义偏差,并且对检索结果的相关度排序不够合理,无法满足用户对智能搜索的需求。本文提出了一种支持语义的可搜索加密...

    Delphi源码,算法相关,base64,加密,解密

    Delphi源码,算法相关,base64,加密,解密 Delphi base64 加密,解密示例源代码,这是个很常用但很流行的一种加密、解密算法,做过快车下载的朋友就知道,快车的下载链就是基于此种加密方法,除了加密网址外,它还可...

    论文研究-同态加密研究进展综述.pdf

    针对云计算中的同态加密问题,进行了相关研究进展综述。介绍了同态密码目前的研究进展,综述了五种典型的公钥同态加密方案和两种典型的全同态加密方案,分析了全同态加密算法的设计方法,并从安全性方面对同态密码学...

    数据加密标准( DES )源代码

    数据加密标准( DES )是一种加密演算法(一种加密信息的方法), 1976年被美国联邦政府的联邦信息处理标准(FIPS)所选中,随后既在国际上广泛流传开来。这个演算法因为包含一些机密设计元素,相关的短密钥长度以及被怀疑...

    VoIP加密方案BEEO的加密算法原理及实现

    本方案力争以简单的运算,规定一种适应于加密在Internet上传输的IP电话(包括信令、媒体以及短信等)相关业务的较高强度的加密方法——BEEO。本方案适应的信令标准包括SIP、MGCP、H.323,适应的媒体传输方式为RTP,...

    最优秀的文件夹加密专家

    通过网络或其他的方法在没有安装[文件夹加密大师]的机器上使用。 自创3种解密模式【完全解密】【临时解密】【浏览解密】,任你选择,能满足你不同场合的解密需求 完全解密:解密后的文件夹,如需恢复加密状态,需要...

Global site tag (gtag.js) - Google Analytics