# 2.1.2 接口签名示例(Authorization)
java代码示例
# 依赖
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.52</version> <!-- 高版本也是可以的 -->
</dependency>
<!-- json 序列化 jackson 其他也可以 注意序列化的字段要是字符序 a->z -->
# 代码示例
package example;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.Security;
import java.util.Base64;
/**
* TokenGeneratorDemo
*
* @author Leon.Dong
* @since 2024/9/10 上午9:36
*/
public class TokenGeneratorDemo {
static {
Security.addProvider(new BouncyCastleProvider());
}
public static final String CIPHER = "AES";
private static final String CIPHER_INSTANCE = "AES/ECB/";
private static final String PADING_TYPE = "PKCS5Padding";
private static final String ENCODING = "utf-8";
public static String encrypt(String text, String rule, String padingType) {
try {
Cipher cipher = Cipher.getInstance(CIPHER_INSTANCE + padingType);
SecretKeySpec key = new SecretKeySpec(rule.getBytes(ENCODING), CIPHER);
cipher.init(Cipher.ENCRYPT_MODE, key);
return Base64.getEncoder().encodeToString(cipher.doFinal(text.getBytes(ENCODING)));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//商户编码和密钥
String merchantCode = "请联系平台获取";
String secretKey = "请联系平台获取";
Token token = new Token();
token.setMerchantCode(merchantCode);
token.setTimestamp(System.currentTimeMillis());
String encryption = TokenGeneratorDemo.encrypt(objectMapper.writeValueAsString(token), secretKey, PADING_TYPE);
token.setNonceStr(encryption);
String sign = Base64.getEncoder().encodeToString(objectMapper.writeValueAsString(token).getBytes(StandardCharsets.UTF_8));
System.out.println(sign);
}
@Data
@JsonPropertyOrder(alphabetic = true)//按字母序 序列化
public static class Token {
@JsonProperty("merchant_code")
private String merchantCode;
private Long timestamp;
@JsonProperty("nonce_str")
private String nonceStr;
}
}