Java 解析facebook中的签名请求

Java 解析facebook中的签名请求,java,facebook,jsp,Java,Facebook,Jsp,我正在尝试在32位操作系统中解析facebook签名请求。 用于在64位操作系统中解析签名的_请求的java代码运行良好。 当我在32位操作系统中使用修改后的代码时, 它在位置0处给出了以下错误“意外字符(£)”。 请帮我找出问题所在 if (request.getParameter("signed_request") != null) { signed_request = request.getParameter("signed_request"); //out.prin

我正在尝试在32位操作系统中解析facebook签名请求。 用于在64位操作系统中解析签名的_请求的java代码运行良好。 当我在32位操作系统中使用修改后的代码时, 它在位置0处给出了以下错误“意外字符(£)”。 请帮我找出问题所在

if (request.getParameter("signed_request") != null)
{
    signed_request  =   request.getParameter("signed_request");
    //out.print("<br>signed_request: "+signed_request);
    try
    {
        System.out.println("signed_request"+signed_request);
        System.out.println("signed_request1");
        fb_data = parse_signed_request(signed_request, secretKey);
    }
    catch(Exception e)
    {
        System.out.println("error"+e);
    }
}





  public static Map parse_signed_request(String input, String secret) throws Exception {
    return parse_signed_request(input, secret, 3600);
  }

  public static Map parse_signed_request(String input, String secret, int max_age) throws Exception {
    String[] split = input.split("[.]", 2);

    String encoded_sig = split[0];
    String encoded_envelope = split[1];
    JSONParser parser = new JSONParser();
    Map envelope = (Map) parser.parse(new String(base32_url_decode(encoded_envelope)));

    String algorithm = (String) envelope.get("algorithm");

    if (!algorithm.equals("HMAC-SHA256")) {
      throw new Exception("Invalid request. (Unsupported algorithm.)");
    }

    if (((Long) envelope.get("issued_at")) < System.currentTimeMillis() / 1000 - max_age) {
      throw new Exception("Invalid request. (Too old.)");
    }

    byte[] key = secret.getBytes();
    SecretKey hmacKey = new SecretKeySpec(key, "HMACSHA256");
    Mac mac = Mac.getInstance("HMACSHA256");
    mac.init(hmacKey);
    byte[] digest = mac.doFinal(encoded_envelope.getBytes());

    if (!Arrays.equals(base32_url_decode(encoded_sig), digest)) {
      throw new Exception("Invalid request. (Invalid signature.)");
    }

    return envelope;
  }
if(request.getParameter(“signed_request”)!=null)
{
signed_request=request.getParameter(“signed_request”);
//打印(
签名请求:“+签名请求”); 尝试 { System.out.println(“签名请求”+签名请求); System.out.println(“已签署的请求1”); fb_data=parse_signed_请求(signed_请求,secretKey); } 捕获(例外e) { 系统输出打印项次(“错误”+e); } } 公共静态映射解析\签名\请求(字符串输入,字符串机密)引发异常{ 返回解析签名请求(输入,机密,3600); } 公共静态映射解析签名请求(字符串输入、字符串机密、int max_age)引发异常{ 字符串[]split=input.split(“[.]”,2); 字符串编码_sig=split[0]; 字符串编码的_信封=拆分[1]; JSONParser=新的JSONParser(); Map信封=(Map)parser.parse(新字符串(base32_url_decode(encoded_信封)); 字符串算法=(字符串)envelope.get(“算法”); 如果(!algorithm.equals(“HMAC-SHA256”)){ 抛出新异常(“无效请求。(不支持的算法”); } if(((长)信封.get(“发出时间”))
使用
base64
方法解码JSON对象。无需将其修改为
base32
,因为它与O.S.架构没有关联

纠正缺陷:

Map envelope = (Map) parser.parse(new String(base64_url_decode(encoded_envelope)));

因此,您将用于解码base64编码数据的方法的名称更改为
base32\u url\u decode
?这是没有道理的;base64中的“64”与操作系统的体系结构没有任何关系。