代码之家  ›  专栏  ›  技术社区  ›  balexandre

Java到JavaScript(加密相关)

  •  1
  • balexandre  · 技术社区  · 15 年前

    我很难在javascript中获得相同的字符串,我认为我做了一些错误的事情…

    Java代码:

    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Date;
    import java.util.GregorianCalendar;
    
    import sun.misc.BASE64Encoder;
    
    private static String getBase64Code(String input) throws 
             UnsupportedEncodingException, NoSuchAlgorithmException {
    
        String base64 = "";
    
        byte[] txt = input.getBytes("UTF8");
        byte[] text = new byte[txt.length+3];
    
        text[0] = (byte)239;
        text[1] = (byte)187;
        text[2] = (byte)191;
    
        for(int i=0; i<txt.length; i++)
           text[i+3] = txt[i];
    
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(text);
        byte digest[] = md.digest();
    
        BASE64Encoder encoder = new BASE64Encoder();
        base64 = encoder.encode(digest);
    
        return base64;
     }
    

    我想用 Paul's MD5 script Farhadi Base 64 Encode script

    但我的测试完全失败了:(

    我的代码:

    function CalculateCredentialsSecret(type, user, pwd) {
    
    var days = days_between(new Date(), new Date(2000, 1, 1));
    var str = type.toUpperCase() + user.toUpperCase() + pwd.toUpperCase() + days;
        var padding_data = String.fromCharCode(239) + 
                           String.fromCharCode(187) + 
                           String.fromCharCode(191);
    
    var md5 = hex_md5(padding_data + str);
    var b64 = base64Encode(md5);
    
    return encodeURIComponent(b64);
    }
    

    有人知道我怎么转换吗 Java方法成为JavaScript的一种方法?

    谢谢你


    测试(今天( 2010年9月29日 ) 3740天 2000年1月1日之后)

    var secret = CalculateCredentialsSecret('AAA', 'BBB', 'CCC');
    
    // secret SHOULD be: S3GYAfGWlmrhuoNsIJF94w==
    
    2 回复  |  直到 15 年前
        1
  •  0
  •   thecoshman    15 年前

    http://pajhome.org.uk/crypt/md5/ <--从此处获取MD5函数(Google上的第一页“javascript MD5”)。 http://www.webtoolkit.info/javascript-base64.html <--获取base64 en/de代码(谷歌搜索“javascript base64 en code”)

    function getBase64Code(input)
    {
      base64 = "";
      txt = input
      text = [];
      text[0] = (byte)239; // These three lines I am stuck on
      text[1] = (byte)187; // These three lines I am stuck on
      text[2] = (byte)191; // These three lines I am stuck on
    
      for(int i=0; i<txt.length; i++)
      {
        text[i+3] = txt[i];
      }
      digest = hex_md5(text);
      base64 = Base64(digest);
      return base64;
    }
    

    刚刚意识到…如果您只想在base64中使用endocde来传输数据,请查看第二个链接。可以做你想做的事。

    更新:

    您应该能够这样做,假设这些额外的字节可以替换三个字符。

    encoded = Base64.encode(hexmd5(padding_data + data));
    
        2
  •  0
  •   balexandre    15 年前

    正确的代码是

    function CalculateCredentialsSecret(type, user, pwd) {
    
    var days = days_between(new Date(), new Date(2000, 1, 1)) + 30;
    var str = type.toUpperCase() + user.toUpperCase() + pwd.toUpperCase() + days;
    
    var padding_data = String.fromCharCode(239, 187, 191);
    
    var md5 = rstr_md5(padding_data+str);
    var b64 = base64Encode(md5);
    
    return encodeURIComponent(b64);
    }