鉴权方式
使用图像识别服务需要提供签名以标明调用者身份.
签名使用AK/SK加密方式生成.
获得AK/SK
签名格式
签名格式为:
ak+":"+加密后的(ak+":"+(当前计算机时间+8小时)的毫秒数)
具体加密方式见代码示例部分
携带签名
签名字符串在Http请求的Header中的authorization字段携带
注意
在使用图像识别服务前请先联系图像识别团队,申请调用权限.
代码示例
public class TripleDes {
private DESedeKeySpec desKeySpec;
private IvParameterSpec ivSpec;
public TripleDes(String sk) {
try {
byte[] keyBytes = sk.getBytes();
this.desKeySpec = new DESedeKeySpec(keyBytes);
this.ivSpec = new IvParameterSpec(sk.substring(0, 8).getBytes());
} catch (Exception e) {
e.printStackTrace();
}
}
public String generateSignature(String ak){
long currentTime = System.currentTimeMillis()+8*60*60*1000;
String data = ak + ":" + currentTime;
String signAuth = ak + ":" + encryptData(data);
return signAuth;
}
public String encryptData(String data) {
byte[] crypted = encrypt(data.getBytes());
return bytesToBase64(crypted);
}
public String decryptData(String data) {
byte[] crypted = base64ToBytes(data);
return new String(decrypt(crypted));
}
public byte[] encrypt(byte[] origData) {
try {
SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
SecretKey key = factory.generateSecret(this.desKeySpec);
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, this.ivSpec);
return cipher.doFinal(origData);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public byte[] decrypt(byte[] crypted) {
try {
SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
SecretKey key = factory.generateSecret(this.desKeySpec);
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key, this.ivSpec);
return cipher.doFinal(crypted);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String bytesToBase64(byte[] buffer) {
Base64.Encoder encoder = Base64.getEncoder();
return encoder.encodeToString(buffer);
}
public static byte[] base64ToBytes(String value) {
Base64.Decoder decoder = Base64.getDecoder();
return decoder.decode(value);
}
}
public static void main(String[] args){
String ak = "";
String sk = "";
TripleDes tripleDes = new TripleDes(sk);
String sign = tripleDes.generateSignature(ak);
System.out.println(sign);
}