V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
insomniowl
V2EX  ›  JavaScript

求助,有没有对 JavaScript 和 Java 都熟悉的朋友,请教下这段 Java 代码的 JavaScript 的实现方式

  •  
  •   insomniowl · 2017-12-21 22:51:55 +08:00 · 4026 次点击
    这是一个创建于 2533 天前的主题,其中的信息可能已经有所发展或是发生改变。
    服务端用到了阿里云 API 网关,涉及到签名的计算,官方文档( https://help.aliyun.com/document_detail/29475.html )只看到了 Java 的实现方式:

    Mac hmacSha256 = Mac.getInstance("HmacSHA256");
    byte[] keyBytes = secret.getBytes("UTF-8");
    hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, "HmacSHA256"));
    String sign = new String(Base64.encodeBase64(hmacSha256.doFinal(stringToSign.getBytes("UTF-8")),"UTF-8"));

    想请教下如何用 JavaScript 实现得到相同的计算结果
    第 1 条附言  ·  2017-12-22 00:40:10 +08:00
    已解决

    const cryptojs = require('crypto-js')

    var wordarrayResult = cryptojs.HmacSHA256(stringToSign ,secret)
    var sign = cryptojs.enc.Base64.stringify(wordarrayResult)

    计算过程就是 HMAC 计算返回原始二进制数据后进行 Base64 编码
    8 条回复    2017-12-22 00:09:23 +08:00
    wxsm
        1
    wxsm  
       2017-12-21 22:55:07 +08:00 via iPhone
    搞一个 java 微服务不就完了,还能解藕,一举两得。
    jamesxu
        2
    jamesxu  
       2017-12-21 22:59:47 +08:00 via iPhone
    翻到页面底部:在 API 网关控制台,调用 API — SDK 下载 处还有更多语种的调用 demo。
    insomniowl
        3
    insomniowl  
    OP
       2017-12-21 23:10:12 +08:00
    @jamesxu 这个之前也看到了,有 Node 的 SDK ( https://github.com/aliyun/api-gateway-nodejs-sdk ),但不知道前端 js 如何来实现。
    viko16
        4
    viko16  
       2017-12-21 23:17:09 +08:00 via Android
    涉及签名的就不要在浏览器端做了
    insomniowl
        5
    insomniowl  
    OP
       2017-12-21 23:18:43 +08:00
    @viko16 #4 小程序呢
    wdlth
        6
    wdlth  
       2017-12-21 23:25:29 +08:00
    用 crypto-js 不行么?
    insomniowl
        7
    insomniowl  
    OP
       2017-12-21 23:31:09 +08:00
    @wdlth #6
    base64.encode(cryptojs.HmacSHA256(stringToSign, secret))
    得到的结果跟复制 Java 代码跑出来的结果并不一样,不知道问题出在哪里了..
    openmynet
        8
    openmynet  
       2017-12-22 00:09:23 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1177 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:30 · PVG 02:30 · LAX 10:30 · JFK 13:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.