发新帖

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

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

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



附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

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

举报 使用道具

回复

精彩评论3

rover12421    发表于 2015-3-30 15:33:23 | 显示全部楼层
des针对的的bytes,java中的String.getbytes不带参数,默然使用本地语言,你可以加参数试试.
js不了解,只要两个语言从string到bytes是一样的,结果才可能一样

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

点评

好的 我还有一个问题 是这样的 我的win8 32 位 安装了1.75的java sdk 用了eclipse 对AES 16位的key 不能进行加密 你可以帮我看看 是什么原因? [mw_shl_code=java,true]/** * */ /** * @author Administrator  详情 回复 发表于 2015-4-2 15:55

举报 使用道具

回复
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 不能进行加密 你可以帮我看看 是什么原因?

[Java] 纯文本查看 复制代码
/**
 * 
 */
/**
 * @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[i]) & 0x0ff) << 16)  
                        | ((((int) data[i + 1]) & 0x0ff) << 8)  
                        | (((int) data[i + 2]) & 0x0ff);  
  
                buf.append(legalChars[(d >> 18) & 63]);  
                buf.append(legalChars[(d >> 12) & 63]);  
                buf.append(legalChars[(d >> 6) & 63]);  
                buf.append(legalChars[d & 63]);  
  
                i += 3;  
  
                if (n++ >= 14) {  
                    n = 0;  
                    buf.append(" ");  
                }  
            }  
  
            if (i == start + len - 2) {  
                int d = ((((int) data[i]) & 0x0ff) << 16)  
                        | ((((int) data[i + 1]) & 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[i]) & 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;  
            }  
        

		}  
          
}

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表