为了账号安全,请及时绑定邮箱和手机立即绑定

android端生成token报错bad token

android端生成token报错bad token

慕码人8056858 2019-03-21 18:19:29
public class UploadToken  {    public static  String getUploadToken(Object object){        Gson gson=new Gson();        String jsonObject=gson.toJson(object);        String encodedPutPolicy = UrlSafeBase64.encodeToString(jsonObject);        String encodedSign="";        try {            encodedSign =hmacSha1(encodedPutPolicy);        }catch (Exception e){        }        String uploadToken = QiNiuConstant.ACCESSKEY + ":" + encodedSign + ":" + encodedPutPolicy;        return uploadToken;    }    public  static   String hmacSha1(final String base)            throws NoSuchAlgorithmException, InvalidKeyException {        String type = "HmacSHA1";        SecretKeySpec secret = new SecretKeySpec(QiNiuConstant.SECRETKEY.getBytes(), type);        Mac mac = Mac.getInstance(type);        mac.init(secret);        byte[] digest = mac.doFinal(base.getBytes());        return Base64.encodeToString(digest, Base64.URL_SAFE);    }其中Object的为:public class ImagePutPolicy implements Serializable {    private String scope;    private long deadline;    private ReturnBody returnBody;    public ImagePutPolicy(String fileName) {        scope = QiNiuConstant.SAVESPACE+":"+fileName;    }    public long getDeadline() {        return deadline;    }    public void setDeadline(long deadline) {        this.deadline = System.currentTimeMillis()/1000+deadline;    }    public ReturnBody getReturnBody() {        return returnBody;    }    public void setReturnBody(ReturnBody returnBody) {        this.returnBody = returnBody;    }}上传代码为  private void simpleUpload() {        ImagePutPolicy putPolicy=new ImagePutPolicy(key);        putPolicy.setDeadline(3600);        token=UploadToken.getUploadToken(putPolicy);        byte[] data=new byte[]{ 0, 1, 2, 3};           
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

token不是后台生成过来的么


-----------------------------------7-29编辑-------------------------------------------------


这应该是七牛上传,所以需要安卓端生成token。如果是七牛上传,代码如下:


public String getToken() {

        try {

            JSONObject _json = new JSONObject();

            long _dataline = System.currentTimeMillis() / 1000 + 3600;

            _json.put("deadline", _dataline);// 有效时间为一个小时

            _json.put("scope", "images");

            String _encodedPutPolicy = UrlSafeBase64.encodeToString(_json

                    .toString().getBytes());

            byte[] _sign = HmacSHA1Encrypt(_encodedPutPolicy, SecretKey);

            String _encodedSign = UrlSafeBase64.encodeToString(_sign);

            String _uploadToken = AccessKey + ':' + _encodedSign + ':'

                    + _encodedPutPolicy;

            return _uploadToken;

        } catch (Exception e) {

            e.printStackTrace();

            return "";

        }

    }

    

    

 /**

     * 

     * 使用 HMAC-SHA1 签名方法对对encryptText进行签名

     * 

     * @param encryptText

     *            被签名的字符串

     * @param encryptKey

     *            密钥

     * @return

     * @throws Exception

     */

    public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey)

            throws Exception {

        byte[] data = encryptKey.getBytes(ENCODING);

        // 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称

        SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);

        // 生成一个指定 Mac 算法 的 Mac 对象

        Mac mac = Mac.getInstance(MAC_NAME);

        // 用给定密钥初始化 Mac 对象

        mac.init(secretKey);

        byte[] text = encryptText.getBytes(ENCODING);

        // 完成 Mac 操作

        return mac.doFinal(text);

    }

希望对你有帮助,以上


查看完整回答
反对 回复 2019-04-22
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

1、第一次听说token是移动端生成的
2、不禁想问:你们的服务端在忙什么

查看完整回答
反对 回复 2019-04-22
  • 3 回答
  • 0 关注
  • 956 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信