常用的加密方式学习笔记

1. Base64

1.1 实现方式

private static String srcTest = "demo test";

	@Test
	public void testBase64() throws IOException {
		
		//使用jdk自带的方式实现Base64加解密
		System.out.println("====使用jdk自带的方式====");
		BASE64Encoder encode = new BASE64Encoder();
		String encodeText = encode.encode(srcTest.getBytes());
		System.out.println("Base64加密后的内容: "+encodeText);
		
		BASE64Decoder decode = new BASE64Decoder();
		String decodeText = new String(decode.decodeBuffer(encodeText));
		System.out.println("Base64解密后的内容: "+decodeText+"\n");
		
		//使用Apache commons-codec Base64实现加解密
		System.out.println("====使用Apache commons-codec的方式====");
		String encodeText02 = new String(Base64.encodeBase64(srcTest.getBytes()));
		System.out.println("Base64解密后的内容: "+encodeText02);
		
		System.out.println("Base64解密后的内容: "+new String(Base64.decodeBase64(encodeText02))+"\n");
		
		
		//使用BouncyCastle的方式实现Base64加解密
		System.out.println("====使用BouncyCastle的方式====");
		String encodeText03 = new String(org.bouncycastle.util.encoders.Base64.encode(srcTest.getBytes()));
		System.out.println("Base64解密后的内容: "+encodeText03);
		
		System.out.println("Base64解密后的内容: "+new String(Base64.decodeBase64(encodeText03))+"\n");
	}
1.2 测试结果

2. AES对称加密

2.1 应用场景

2.2 具体实现

@Test
	public void testAES() throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException{
		//构建密钥生成器
		KeyGenerator keygen = KeyGenerator.getInstance("AES");
		//初始化密钥生成器
		keygen.init(128);
		//产生原始对称密钥
		SecretKey secretkey = keygen.generateKey();
		//获得原始对称密钥的字节数组
		byte[] keybytes = secretkey.getEncoded();
		//根据字节数组生成AES密钥
		Key key = new SecretKeySpec(keybytes, "AES");
		//根据指定算法AES生成密码器
		Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
		//初始化密码器
		cipher.init(Cipher.ENCRYPT_MODE, key);
		//获取加密内容的字节数组,进行加密
		byte[] encoderesult = cipher.doFinal(srcTest.getBytes());
		//因为加密后的内容是二进制的,这里转换为16进制进行显示
		System.out.println("AES加密后的16进制密文为: "+Hex.encodeHexString(encoderesult));
		
		//解密
		cipher.init(Cipher.DECRYPT_MODE, key);
		String decoderesult = new String(cipher.doFinal(encoderesult));
		System.out.println("AES解密后的内容为: "+decoderesult);
			
		}
2.3 测试结果

3. 非对称RSA加密算法

3.1 应用场景

3.2 具体实现

@Test
	public void testRSA() throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException{
		//初始化密钥
		KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
		keyPairGenerator.initialize(512);
		KeyPair keyPair = keyPairGenerator.generateKeyPair();
		RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
		RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
		System.out.println("Public key: "+Base64.encodeBase64String(rsaPublicKey.getEncoded()));
		System.out.println("Private key: "+Base64.encodeBase64String(rsaPrivateKey.getEncoded()));
		
		//私钥加密
		PKCS8EncodedKeySpec encodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
		KeyFactory keyFactory = KeyFactory.getInstance("rsa");
		PrivateKey privateKey = keyFactory.generatePrivate(encodedKeySpec);
		Cipher cipher = Cipher.getInstance("rsa");
		cipher.init(Cipher.ENCRYPT_MODE, privateKey);
		byte[] encrptresult = cipher.doFinal(srcTest.getBytes());
		System.out.println("私钥加密后的内容: "+Base64.encodeBase64String(encrptresult));
		
		//公钥解密
		X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
		PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
		cipher.init(Cipher.DECRYPT_MODE, publicKey);
		byte[] decryptresult = cipher.doFinal(encrptresult);
		System.out.println("公钥解密后的内容: "+new String(decryptresult));
	}
3.3 测试结果

4. MD加密算法

4.1 应用场景

4.2 具体实现

@Test
	public void testMD5() throws NoSuchAlgorithmException{
		MessageDigest mdDigest = MessageDigest.getInstance("md5");
		byte[] result = mdDigest.digest(srcTest.getBytes());
		System.out.println("md5加密后的内容为: "+Hex.encodeHexString(result));
	}
4.3 测试结果

5. SHA加密算法

5.1 应用场景

5.2 具体实现

@Test
	public void testSHA() throws NoSuchAlgorithmException{
		MessageDigest md = MessageDigest.getInstance("sha");
		md.update(srcTest.getBytes());
		byte[] result = md.digest();
		System.out.println("sha加密后的内容为: "+Hex.encodeHexString(result));
	}

5.3 测试结果



6. MAC加密算法

6.1 概念

MACMessage Authentication Code,消息认证码算法)是含有密钥的散列函数算法,兼容了MDSHA算法的特性,并在此基础上加入了密钥。消息的散列值由只有通信双方知道的秘密密钥K来控制,因次,我们也常把MAC称为HMACkeyed-Hash Message Authentication Code

6.2 应用场景


6.3 具体实现

	@Test
	public void testMAC() throws NoSuchAlgorithmException, InvalidKeyException{
		//初始化密钥生成器
		KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
		//生成密钥
		SecretKey secretKey = keyGenerator.generateKey();
		//获得密钥
		byte[] key = secretKey.getEncoded();
		//还原密钥
		SecretKey restorekey = new SecretKeySpec(key, "HmacMD5");
		//实例化MAC
		Mac mac = Mac.getInstance(restorekey.getAlgorithm());
		//初始化MAC
		mac.init(restorekey);
		//执行mac加密
		byte[] macresult = mac.doFinal(srcTest.getBytes());
		System.out.println("MAC加密后的内容为: "+Hex.encodeHexString(macresult));
	}
6.4 测试结果



总结:

在进行接口测试的过程中,难免会遇到需要对参数的加密,所以有必要了解加密的一些方式,才能更加方便的构造数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GoLang学习笔记主要包括以下几个方面: 1. 语法规则:Go语言要求按照语法规则编写代码,例如变量声明、函数定义、控制结构等。如果程序中违反了语法规则,编译器会报错。 2. 注释:Go语言中的注释有两种形式,分别是行注释和块注释。行注释使用`//`开头,块注释使用`/*`开头,`*/`结尾。注释可以提高代码的可读性。 3. 规范代码的使用:包括正确的缩进和空白、注释风格、运算符两边加空格等。同时,Go语言的代码风格推荐使用行注释进行注释整个方法和语句。 4. 常用数据结构:如数组、切片、字符串、映射(map)等。可以使用for range遍历这些数据结构。 5. 循环结构:Go语言支持常见的循环结构,如for循环、while循环等。 6. 函数:Go语言中的函数使用`func`关键字定义,可以有参数和返回值。函数可以提高代码的重用性。 7. 指针:Go语言中的指针是一种特殊的变量,它存储的是另一个变量的内存地址。指针可以实现动态内存分配和引用类型。 8. 并发编程:Go语言提供了goroutine和channel两个并发编程的基本单位,可以方便地实现多线程和高并发程序。 9. 标准库:Go语言提供了丰富的标准库,涵盖了网络编程、文件操作、加密解密等多个领域,可以帮助开发者快速实现各种功能。 10. 错误处理:Go语言中的错误处理使用`defer`和`panic`两个关键字实现,可以有效地处理程序运行过程中出现的错误。 通过以上内容的学习,可以掌握Go语言的基本语法和编程思想,为进一步学习和应用Go语言打下坚实的基础。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Golang学习笔记](https://blog.csdn.net/weixin_52310067/article/details/129467041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [golang学习笔记](https://blog.csdn.net/qq_44336275/article/details/111143767)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值