如何对Java对象的属性及其值按照ASCII码顺序获得一个用于签名或传参的连接字符串

有时候我们通信的时候要对参数进行签名,以防止在通信过程中被篡改,在Java编程中,对Java对象的属性及其值按照ASCII码顺序获得一个字符串,用来进行签名,那么方法可以按照下面来进行。

直接上代码把

private static String buildSignStr(Object object) {
	try {
		if (object == null) {
			return null;
		}
		Map map = new HashMap();
		if (object instanceof Map) {
			if (((Map) object).isEmpty()) {
				return null;
			}
			map = (Map) object;
		} else {
			for (Field field : object.getClass().getDeclaredFields()) {
				field.setAccessible(true);
				map.put(field.getName(), field.get(object));
			}
		}
		TreeMap<String, String> treeMap = new TreeMap<>(map);
		StringBuffer strBuffer = new StringBuffer();
		treeMap.entrySet().forEach(i -> {
			if (i.getValue() == null) {
				return;
			}
			strBuffer.append(i.getKey()).append("=").append(String.valueOf(i.getValue())).append("&");
		});
		String signStr=strBuffer.substring(0, strBuffer.length() - 1));
		return SecurityTool.signRsa(Rsa.SignatureAlgorithm.MD5withRSA, signStr);

	} catch (SignatureException e) {
		e.printStackTrace();
	} catch (IllegalAccessException e) {
		e.printStackTrace();
	} catch (NoSuchAlgorithmException e) {
		e.printStackTrace();
	} catch (InvalidKeyException e) {
		e.printStackTrace();
	}
	logger.error("target sign object can`t be null");
	return null;
}

进行测试,最终得到类似下图
在这里插入图片描述
其中签名算法可以自己写一个,或者引用Java jdk自己的也行。

public  class SecurityTool{
 public static String sign(final Rsa.SignatureAlgorithm signatureAlgorithm, final RSAPrivateKey rsaPrivateKey, final String data)
            throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
		Signature signature = Signature.getInstance(signatureAlgorithm.name);
		signature.update(data.getBytes(StandardCharsets.UTF_8));
		return Base64.encode(signature.sign())
    }
}

注意,上面这个是我在CSDN md编辑器写的,可能编译不过,如有问题,可以联系一起调调。闲了我会试试。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页