Java в JavaScript (шифрование) - PullRequest
1 голос
/ 29 марта 2010

У меня трудности с получением той же строки в 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;
 }

Я пытаюсь сделать это, используя Сценарий MD5 Пола * также 1007 * Сценарий кодирования Farhadi Base 64

но мои тесты не пройдены полностью: (

мой код:

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-метод?

Спасибо


Тесты (на сегодня ( 29-09-2010 ), 3740 дней после 1 января 2000 г.)

var secret = CalculateCredentialsSecret('AAA', 'BBB', 'CCC');

// secret SHOULD be: S3GYAfGWlmrhuoNsIJF94w==

Ответы [ 2 ]

0 голосов
/ 29 марта 2010

правильный код

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);
}
0 голосов
/ 29 марта 2010

http://pajhome.org.uk/crypt/md5/ http://www.webtoolkit.info/javascript-base64.html <- получить код base64 en / de (googled 'javascript base64 encode') </p>

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;
}

Только что понял ... если все, что вам нужно, это endocde в base64 для передачи данных, посмотрите на вторую ссылку. можете делать то, что вы хотите, как есть.

UPDATE:

тогда вы сможете сделать что-то подобное, предположим, что эти дополнительные байты могут заменить три символа.

encoded = Base64.encode(hexmd5(padding_data + data));
...