好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

本篇介绍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的类替换,请注意!

到此这篇关于jmeter接口测试-使用rsa加密解密算法的文章就介绍到这了,更多相关jmeter rsa加密解密算法内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://www.cnblogs.com/artoftest/p/7298929.html

查看更多关于jmeter接口测试之使用rsa算法加密解密的代码的详细内容...

  阅读:14次