cvt126 发表于 2015-3-30 15:33:22

js和java的DES对有中文的文本加密结果不一样,求解决!

同样一个含有中文文本 在js加密和java加密是得到不一样的结果没有中文时候结果是一样的 我想请问怎么怎么解决呢是不是js需要编码了 才能加密一样?
只要能把{"pwd":"123123","username":"张无忌","cell":"18475556059"} 用js加密出来 成Mc开头 和java一样就行了 先谢过了!

js和jar文件在这里
链接: http://pan.baidu.com/s/1c0k1dKk 密码: nwgi



rover12421 发表于 2015-3-30 15:33:23

des针对的的bytes,java中的String.getbytes不带参数,默然使用本地语言,你可以加参数试试.
js不了解,只要两个语言从string到bytes是一样的,结果才可能一样

看js好像是toutf8的,你在java里也使用getbytes("utf8")试试

cvt126 发表于 2015-3-30 19:05:50

@鬼哥 希望鬼哥帮忙看看

cvt126 发表于 2015-4-2 15:55:46

rover12421 发表于 2015-4-1 00:33
des针对的的bytes,java中的String.getbytes不带参数,默然使用本地语言,你可以加参数试试.
js不了解,只要两 ...

好的 我还有一个问题 是这样的 我的win8 32 位 安装了1.75的java sdk 用了eclipse 对AES 16位的key 不能进行加密 你可以帮我看看 是什么原因?

/**
*
*/
/**
* @author Administrator
*
*/
package aiyiAES;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.security.InvalidKeyException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.spec.SecretKeySpec;

public class AES {
private static byte[] a = {105,113,105,121,105,49,50,51,41,40,42,0,0,0,0,0};

private static String encrypt(String paramString) throws Exception
{

      byte[] arrayOfByte = paramString.getBytes();
      SecretKeySpec localSecretKeySpec = new SecretKeySpec(a, "AES");
      Cipher localCipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");
      localCipher.init(1, localSecretKeySpec);
      String str = new String(Base64.encode(localCipher.doFinal(arrayOfByte)));
      return str;
}

private static String decrypt(String paramString) throws Exception
{
      byte[] arrayOfByte =Base64.decode(paramString);
      SecretKeySpec localSecretKeySpec = new SecretKeySpec(a, "AES");
      Cipher localCipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");
      localCipher.init(2, localSecretKeySpec);
      String str = new String(localCipher.doFinal(arrayOfByte));
      return str;
}
public static void main(String[] args) throws Exception{
          String str1="ll+ncuSKhViLq1Y4W4/69Pb3qSzMO+i9bb8X6qsUoYQ=";
          String str3 = encrypt(str1);
          System.out.println(new String(str3));

}


}


class Base64 {

        private static final char[] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();
    /**
   * data[]进行编码
   * @param data
   * @return
   */
      public static String encode(byte[] data) {
            int start = 0;
            int len = data.length;
            StringBuffer buf = new StringBuffer(data.length * 3 / 2);

            int end = len - 3;
            int i = start;
            int n = 0;

            while (i <= end) {
                int d = ((((int) data) & 0x0ff) << 16)
                        | ((((int) data) & 0x0ff) << 8)
                        | (((int) data) & 0x0ff);

                buf.append(legalChars[(d >> 18) & 63]);
                buf.append(legalChars[(d >> 12) & 63]);
                buf.append(legalChars[(d >> 6) & 63]);
                buf.append(legalChars);

                i += 3;

                if (n++ >= 14) {
                  n = 0;
                  buf.append(" ");
                }
            }

            if (i == start + len - 2) {
                int d = ((((int) data) & 0x0ff) << 16)
                        | ((((int) data) & 255) << 8);

                buf.append(legalChars[(d >> 18) & 63]);
                buf.append(legalChars[(d >> 12) & 63]);
                buf.append(legalChars[(d >> 6) & 63]);
                buf.append("=");
            } else if (i == start + len - 1) {
                int d = (((int) data) & 0x0ff) << 16;

                buf.append(legalChars[(d >> 18) & 63]);
                buf.append(legalChars[(d >> 12) & 63]);
                buf.append("==");
            }

            return buf.toString();
      }

      private static int decode(char c) {
            if (c >= 'A' && c <= 'Z')
                return ((int) c) - 65;
            else if (c >= 'a' && c <= 'z')
                return ((int) c) - 97 + 26;
            else if (c >= '0' && c <= '9')
                return ((int) c) - 48 + 26 + 26;
            else
                switch (c) {
                case '+':
                  return 62;
                case '/':
                  return 63;
                case '=':
                  return 0;
                default:
                  throw new RuntimeException("unexpected code: " + c);
                }
      }

      /**
         * Decodes the given Base64 encoded String to a new byte array. The byte
         * array holding the decoded data is returned.
         */

      public static byte[] decode(String s) {

            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            try {
                decode(s, bos);
            } catch (IOException e) {
                throw new RuntimeException();
            }
            byte[] decodedBytes = bos.toByteArray();
            try {
                bos.close();
                bos = null;
            } catch (IOException ex) {
                System.err.println("Error while decoding BASE64: " + ex.toString());
            }
            return decodedBytes;
      }

      private static void decode(String s, OutputStream os) throws IOException {
            int i = 0;

            int len = s.length();

            while (true) {
                while (i < len && s.charAt(i) <= ' ')
                  i++;

                if (i == len)
                  break;

                int tri = (decode(s.charAt(i)) << 18)
                        + (decode(s.charAt(i + 1)) << 12)
                        + (decode(s.charAt(i + 2)) << 6)
                        + (decode(s.charAt(i + 3)));

                os.write((tri >> 16) & 255);
                if (s.charAt(i + 2) == '=')
                  break;
                os.write((tri >> 8) & 255);
                if (s.charAt(i + 3) == '=')
                  break;
                os.write(tri & 255);

                i += 4;
            }
      

                }
         
}
页: [1]
查看完整版本: js和java的DES对有中文的文本加密结果不一样,求解决!