您的位置:首页 > 编程语言 > Java开发

百度翻译API与MD5加密 Java使用

2015-12-09 16:21 393 查看
这段时间研究一下百度翻译API,结果发现新版的百度翻译较以前的有了很大的变化:

旧版百度翻译的URL地址:

http://openapi.baidu.com/public/2.0/bmt/translate?client_id=YourApiKey&q=today&from=auto&to=auto

参数只需要:client_id(API key),q(翻译的内容),from(源语言语种:语言代码或auto),to(目标语言语种:语言代码或auto);

新版百度翻译的URL地址:

http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4

参数需要:q(翻译的内容),from(翻译源语言 ,可设置为auto),to(译文语言,不可设置为auto),appid (API key)

salt(随机数),sign(签名);

签名sign生成的方法是:

1、将请求参数中的 APPID(appid), 翻译query(q, 注意为UTF-8编码), 随机数(salt), 以及平台分配的密钥(可在管理控制台查看)

按照 appid+q+salt+密钥 的顺序拼接得到字符串1。

2、对字符串1做md5,得到32位小写的sign。

自己从网上找了一个MD5的加密算法,英文还算正常,但是出现汉字的时候,就会返回一条:

{“error_code”:”54001”,”error_msg”:”Invalid Sign”}

找到错误码列表:

54001 签名错误 请检查您的签名生成方法

没办法,看了一下百度翻译提供的demo:

PHP 版、JS 版、Python 版、C 版

Java呢??木有。。。。。坑爹。。。于是乎JS。。。是不是可以转为Java???经过两天的奋斗。。。。于是乎。。。我放弃了。。。在网上搜寻了一番,返现Java 1.6之后可以直接调用js文件,经过一番调试终于成功了。。。

代码如下:

import java.io.FileReader;
import java.util.Date;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class TestMD5 {
public static void main(String[] args) {

String APPID = "APPID"; // 需要改成自己的APP ID
String KEY = "KEY"; //需要改成自己的密钥
String SALT = Long.toString(new Date().getTime());//随机数,官方提供的是获取时间
String SOURCE = "足球";//翻译内容
String SIGN = "";

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");

String jsFileName = "md5.js"; // 读取js文件

FileReader reader;
try {
reader = new FileReader(jsFileName);
engine.eval(reader);
if (engine instanceof Invocable) {
Invocable invoke = (Invocable) engine; // 调用merge方法,并传入两个参数
System.out.println(APPID + SOURCE + SALT + KEY);
SIGN = (String) invoke.invokeFunction("MD5",
APPID + SOURCE + SALT + KEY);
System.out.println(SIGN);
}

reader.close();

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 执行指定脚本

}
}


运行的结果:d8e590e6dcd9034cb0206efdd04a164f

百度提供的MD5在线生成(http://app.baidu.com/yiten_md5)的结果:常规md5加密($pass)

32位MD5大写:D8E590E6DCD9034CB0206EFDD04A164F

32位MD5小写:d8e590e6dcd9034cb0206efdd04a164f

16位MD5大写:DCD9034CB0206EFD

16位MD5小写:dcd9034cb0206efd

希望对使用百度翻译API有用;

参考文章:/article/9026501.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: