• 安全测试 —— Jmeter 登录接口密码 - rsa加密


    1、出于安全考虑,有的网站在登陆时为了防止用户在登录时账户密码泄漏,会使用各种加密,给登录的账户密码加密

    比如:明文保存,对称加密算法,MD5、SHA1等单向HASH算法,RSA算法,加密FBPDF2算法,bcrypt,scrypt等。

    所以我们在做注册或者登录的性能测试时,需要借助脚本来解密成功调用接口。

    2、登录密码使用RSA加密。注册或者登录的时候需要使用公钥给密码加密后,传给接口。

    这时需要借助脚本代码将我们的密码用公钥加密(这里用的是Java的脚本)

    3、详细的操作过程

    ①将ip地址和端口参数化

    ②给密码使用rsa算法加密,添加一个取样器:BeanShell取样器,粘贴脚本代码

    脚本代码如下:

    1. import org.apache.commons.codec.binary.Base64;
    2. import java.io.ByteArrayOutputStream;
    3. import java.security.Key;
    4. import java.security.KeyFactory;
    5. import java.security.KeyPair;
    6. import java.security.KeyPairGenerator;
    7. import java.security.PrivateKey;
    8. import java.security.PublicKey;
    9. import java.security.Signature;
    10. import java.security.interfaces.RSAPrivateKey;
    11. import java.security.interfaces.RSAPublicKey;
    12. import java.security.spec.PKCS8EncodedKeySpec;
    13. import java.security.spec.X509EncodedKeySpec;
    14. import java.util.HashMap;
    15. import java.util.Map;
    16. import javax.crypto.Cipher;
    17. String RSA_PUB_KEY="rsa公钥";
    18. String KEY_ALGORITHM = "RSA";
    19. String SIGNATURE_ALGORITHM = "MD5withRSA";
    20. int MAX_ENCRYPT_BLOCK = 117;
    21. int MAX_DECRYPT_BLOCK = 128;
    22. public static byte[] decryptByPublicKey(byte[] encryptedData, String publicKey)
    23. throws Exception {
    24. byte[] keyBytes = Base64.decodeBase64(publicKey);
    25. X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
    26. KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
    27. Key publicK = keyFactory.generatePublic(x509KeySpec);
    28. Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
    29. cipher.init(Cipher.DECRYPT_MODE, publicK);
    30. int inputLen = encryptedData.length;
    31. ByteArrayOutputStream out = new ByteArrayOutputStream();
    32. int offSet = 0;
    33. byte[] cache;
    34. int i = 0;
    35. // 对数据分段解密
    36. while (inputLen - offSet > 0) {
    37. if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
    38. cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK);
    39. } else {
    40. cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
    41. }
    42. out.write(cache, 0, cache.length);
    43. i++;
    44. offSet = i * MAX_DECRYPT_BLOCK;
    45. }
    46. byte[] decryptedData = out.toByteArray();
    47. out.close();
    48. return decryptedData;
    49. }
    50. public static byte[] encryptByPublicKey(byte[] data, String publicKey)
    51. throws Exception {
    52. byte[] keyBytes = Base64.decodeBase64(publicKey);
    53. X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
    54. KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
    55. Key publicK = keyFactory.generatePublic(x509KeySpec);
    56. // 对数据加密
    57. Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
    58. cipher.init(Cipher.ENCRYPT_MODE, publicK);
    59. int inputLen = data.length;
    60. ByteArrayOutputStream out = new ByteArrayOutputStream();
    61. int offSet = 0;
    62. byte[] cache;
    63. int i = 0;
    64. // 对数据分段加密
    65. while (inputLen - offSet > 0) {
    66. if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
    67. cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);
    68. } else {
    69. cache = cipher.doFinal(data, offSet, inputLen - offSet);
    70. }
    71. out.write(cache, 0, cache.length);
    72. i++;
    73. offSet = i * MAX_ENCRYPT_BLOCK;
    74. }
    75. byte[] encryptedData = out.toByteArray();
    76. out.close();
    77. return encryptedData;
    78. }
    79. String str = "登录密码";
    80. String result ="";
    81. try {
    82. result = Base64.encodeBase64String(encryptByPublicKey(str.getBytes(), RSA_PUB_KEY));
    83. System.out.println(result);
    84. } catch (Exception e) {
    85. // TODO Auto-generated catch block
    86. e.printStackTrace();
    87. }
    88. print(result);
    89. vars.put("sign",result);
    90. return result;

    注意:在脚本里面,在Java的脚本里面,最下面的string str =“登录密码”,你把引号里面的登录密码改成你帐号的密码就行

    ③在登录接口直接调用加密后的密码:{$sign}

    ④查看结果树

    最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

    软件测试面试文档

    我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
     

    在这里插入图片描述

     

  • 相关阅读:
    【论文阅读】—— PointNet
    Vue.js快速入门:构建现代Web应用
    基于 Spring boot + MyBatis 的在线音乐播放系统
    MySQL事务和锁
    神经网络中的Heloo,World,基于MINST数据集的LeNet
    外汇天眼:想通过外汇交易在几个月内成为亿万富翁吗?你必须知道的七大交易法则
    vue3后台管理框架之基础配置
    【【萌新的FPGA学习之按键控制蜂鸣器之消抖介绍】】
    不懂23种设计模式?别灰心,这份核心笔记来帮你,你想知道的都在这里!
    PyQt5 数据库处理
  • 原文地址:https://blog.csdn.net/IT_LanTian/article/details/133279631