当前位置: 代码迷 >> 综合 >> sha1,sha256 java和python的加密对应关系
  详细解决方案

sha1,sha256 java和python的加密对应关系

热度:81   发布时间:2024-03-09 20:54:59.0

最近在搞爬虫的测试。要验证规则啊,其他等信息,为了方便测试,所以在jmeter中通过beanshell实现加密。

目前接触到3中加密,我也没有深究其中的原理,能用就行,这里仅做记录。

以下的java脚本均是在jmeter中添加beanshell请求

1.md5加密

这种加密,jmeter中自带,可以直接调用实现 ,sign就是你要进行加密的变量,mdsign就是md5加密后的

import org.apache.commons.codec.digest.DigestUtils; 

String mdsign = DigestUtils.md5Hex(sign);  

 

2.sha1

学会了sha1,sha256也就比较容易实现,在加密之前都需要排序。

先来看python 的代码

import hmac
import base64
def getcode():key = 'ab6ydwgSEvbL234gudd1Q80dR8atTLZaabOyX3mfdFB0FMGWI60SALA=='encrypt_text = hmac.new(key.encode("utf-8"), text.encode("utf-8"), hashlib.sha1).digest()return base64.b64encode(encrypt_text).decode("utf-8")

相对应的上面的东东,java里要怎么处理呢?

建议大家在写beanshell的时候,用上idea,不然jmeter里写beanshell会吐血。 data就是要加密的数据,key就是秘钥,beanshell里面可以以下面的方式编写,对java格式不敏感。

public String genHMAC(String data, String key){//sha1加密String HMAC_SHA1_ALGORITHM = "HmacSHA1";byte[] result = null;try {SecretKeySpec signinKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM);Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);mac.init(signinKey);byte[] rawHmac = mac.doFinal(data.getBytes());result = Base64.encodeBase64(rawHmac);}catch (NoSuchAlgorithmException e) {System.err.println(e.getMessage());}catch (InvalidKeyException e) {System.err.println(e.getMessage());}if (null != result) {return new String(result);} else {return null;}}//加密
String key = "ab6ydwgSEvbL234gudd1Q80dR8atTLZaabOyX3mfdFB0FMGWI60SALA==";
String gethmac = genHMAC(sau,key);

3.sha256

依然先来看python的  MakeMap这个函数是排序之后,返回一个字符串

import hmacdef MakeSignkeyv1(params=None, appsecret='63cd60a0c23843458afd441410c65e065'):InitSignKeyV1 = MakeMap(params).encode('utf-8') # 加密数据signature = hmac.new(appsecret.encode('utf-8'), InitSignKeyV1, digestmod=sha256).hexdigest()return signature

java的sha256加密 ,这里多了一个步骤,将加密后的字符数组转化为字符串,代码我也是搬来的,与上面的python的256加密对等。

//将加密后的字符数组转化为字符串
private static String byteArrayToHexString(byte[] b) {StringBuilder hs = new StringBuilder();String stmp;for (int n = 0; b!=null && n < b.length; n++) {stmp = Integer.toHexString(b[n] & 0XFF);if (stmp.length() == 1)hs.append('0');hs.append(stmp);}return hs.toString().toLowerCase();
}
//将排序后的串加密
public static String genHMAC(String data, String key){//sha1加密String HMAC_SHA256_ALGORITHM = "HmacSHA256";String result = "";try {SecretKeySpec signinKey = new SecretKeySpec(key.getBytes(), HMAC_SHA256_ALGORITHM);Mac mac = Mac.getInstance(HMAC_SHA256_ALGORITHM);mac.init(signinKey);byte[] rawHmac = mac.doFinal(data.getBytes());result = byteArrayToHexString(rawHmac);}catch (NoSuchAlgorithmException e) {System.err.println(e.getMessage());}catch (InvalidKeyException e) {System.err.println(e.getMessage());}if (null != result) {return result;} else {return null;}
}

 

  相关解决方案