jmeter接口测试之使用rsa算法加密解密的代码

2023-12-13 16:55:12

本篇介绍jmeter 使用rsa算法进行加密参数

如果测试过程中,部分接口采用了rsa加密算法,我们的jmeter 也是可以直接拿来调用的,不需要开发配合去掉加密代码!

直接上代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

import org.apache.commons.codec.binary.Base64;

import java.io.ByteArrayOutputStream;

import java.security.Key;

import java.security.KeyFactory;

import java.security.KeyPair;

import java.security.KeyPairGenerator;

import java.security.PrivateKey;

import java.security.PublicKey;

import java.security.Signature;

import java.security.interfaces.RSAPrivateKey;

import java.security.interfaces.RSAPublicKey;

import java.security.spec.PKCS8EncodedKeySpec;

import java.security.spec.X509EncodedKeySpec;

import java.util.HashMap;

import java.util.Map;

import javax.crypto.Cipher;

String RSA_PUB_KEY="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNPFO1OaKJbLOH7hVzjj8s+k+spSgG7D2imIpR1ukC3xqgEUYP/vYIiZHXnK04Ddk0ELYee5xDbFfTHSWOK6d2lqK0ydWtLFHCdKpBehM/YKa72zf5KaSJGGgag8EQw4o5ZBS/Ia9w2OxYZ1S94OeRXaA+Z4cy8rBui0hTW9Z0pwIDAQAB";

String KEY_ALGORITHM = "RSA";

String SIGNATURE_ALGORITHM = "MD5withRSA";

int MAX_ENCRYPT_BLOCK = 117;

int MAX_DECRYPT_BLOCK = 128;

public static byte[] decryptByPublicKey(byte[] encryptedData, String publicKey)

????????????throws Exception {

????????byte[] keyBytes = Base64.decodeBase64(publicKey);

????????X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);

????????KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);

????????Key publicK = keyFactory.generatePublic(x509KeySpec);

????????Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());

????????cipher.init(Cipher.DECRYPT_MODE, publicK);

????????int inputLen = encryptedData.length;

????????ByteArrayOutputStream out = new ByteArrayOutputStream();

????????int offSet = 0;

????????byte[] cache;

????????int i = 0;

????????// 对数据分段解密

????????while (inputLen - offSet > 0) {

????????????if (inputLen - offSet > MAX_DECRYPT_BLOCK) {

????????????????cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK);

????????????} else {

????????????????cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);

????????????}

????????????out.write(cache, 0, cache.length);

????????????i++;

????????????offSet = i * MAX_DECRYPT_BLOCK;

????????}

????????byte[] decryptedData = out.toByteArray();

????????out.close();

????????return decryptedData;

????}

????public static byte[] encryptByPublicKey(byte[] data, String publicKey)

????????????throws Exception {

????????byte[] keyBytes = Base64.decodeBase64(publicKey);

????????X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);

????????KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);

????????Key publicK = keyFactory.generatePublic(x509KeySpec);

????????// 对数据加密

????????Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());

????????cipher.init(Cipher.ENCRYPT_MODE, publicK);

????????int inputLen = data.length;

????????ByteArrayOutputStream out = new ByteArrayOutputStream();

????????int offSet = 0;

????????byte[] cache;

????????int i = 0;

????????// 对数据分段加密

????????while (inputLen - offSet > 0) {

????????????if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {

????????????????cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);

????????????} else {

????????????????cache = cipher.doFinal(data, offSet, inputLen - offSet);

????????????}

????????????out.write(cache, 0, cache.length);

????????????i++;

????????????offSet = i * MAX_ENCRYPT_BLOCK;

????????}

????????byte[] encryptedData = out.toByteArray();

????????out.close();

????????return encryptedData;

????}

????String str = "idNum=633335199606143151&name=蔺四十&phone=17610010005";

String result ="";

try {

????result = Base64.encodeBase64String(encryptByPublicKey(str.getBytes(), RSA_PUB_KEY));

????System.out.println(result);

} catch (Exception e) {

????// TODO Auto-generated catch block

????e.printStackTrace();

}

print(result);

vars.put("sign",result);

return result;

看运行效果

上述代码,直接把加密结果放入变量sign中,在其他地方,如果需要调用加密结果,只需要 使用代码:${sign}即可

1

import org.apache.commons.codec.binary.Base64;

引入了jmeter包中的类,如果本代码在jmeter环境运行,不需要加载第三方jar包
如果在eclipse 或者其他环境中运行,需要其他base64的类替换,请注意!

?现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!?希望能帮助到你!【100%无套路免费领取】

文章来源:https://blog.csdn.net/m0_70669463/article/details/134973426
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。