Android DES文字列暗号化後の復号化文字列

4699 ワード

データ保護のため、ソフトウェア内のデータを暗号化する必要がありますが、androidクライアントの復号時にエラーが発生しました.
個人的にはシステムの原因だと思っています.暗号化にはwindowシステムが使われるため、復号はandroid側で行われる.
漢字文字列の暗号化方法は異なり、同じ暗号化方法でも異なります.特にこの貼ることを出して、求める良い解決方法を望みます.
 
異なるシステムの一般的な方法が望ましい.
 
暗号化方法:参考http://www.icnote.com/DES-Encrypt/ありがとう
CODE:
 
/**
 * des     
 * @author admin
 *
 */
public class DESPlus {
	private static String strDefaultKey = "123456";

	private Cipher encryptCipher = null;

	private Cipher decryptCipher = null;

	/**
	 *  byte       16       ,  :byte[]{8,18}   :0813,  public static byte[]
	 * hexStr2ByteArr(String strIn)          
	 *
	 * @param arrB
	 *                 byte  
	 * @return        
	 * @throws Exception
	 *                       ,        
	 */
	public static String byteArr2HexStr(byte[] arrB) throws Exception {
		int iLen = arrB.length;
		//   byte         ,                
		StringBuffer sb = new StringBuffer(iLen * 2);
		for (int i = 0; i < iLen; i++) {
			int intTmp = arrB[i];
			//         
			while (intTmp < 0) {
				intTmp = intTmp + 256;
			}
			//   0F        0
			if (intTmp < 16) {
				sb.append("0");
			}
			sb.append(Integer.toString(intTmp, 16));
		}
		return sb.toString();
	}

	/**
	 *    16          byte  ,  public static String byteArr2HexStr(byte[] arrB)
	 *          
	 *
	 * @param strIn
	 *                    
	 * @return     byte  
	 * @throws Exception
	 *                       ,        
	 * @author 
	 */
	public static byte[] hexStr2ByteArr(String strIn) throws Exception {
		byte[] arrB = strIn.getBytes();
		int iLen = arrB.length;

		//           ,                2
		byte[] arrOut = new byte[iLen / 2];
		for (int i = 0; i < iLen; i = i + 2) {
			String strTmp = new String(arrB, i, 2);
			arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);
		}
		return arrOut;
	}

	/**
	 *       ,      
	 *
	 * @throws Exception
	 */
	public DESPlus() throws Exception {
		this(strDefaultKey);
	}

	/**
	 *         
	 *
	 * @param strKey
	 *                 
	 * @throws Exception
	 */
	public DESPlus(String strKey) throws Exception {
		Key key = getKey(strKey.getBytes());

		encryptCipher = Cipher.getInstance("DES");
		encryptCipher.init(Cipher.ENCRYPT_MODE, key);

		decryptCipher = Cipher.getInstance("DES");
		decryptCipher.init(Cipher.DECRYPT_MODE, key);
	}

	/**
	 *       
	 *
	 * @param arrB
	 *                    
	 * @return         
	 * @throws Exception
	 */
	public byte[] encrypt(byte[] arrB) throws Exception {
		return encryptCipher.doFinal(arrB);
	}

	/**
	 *      
	 *
	 * @param strIn
	 *                   
	 * @return        
	 * @throws Exception
	 */
	public String encrypt(String strIn) throws Exception {
		if (strIn == null) {
			strIn = "";
		}
		return byteArr2HexStr(encrypt(strIn.getBytes()));
	}

	/**
	 *       
	 *
	 * @param arrB
	 *                    
	 * @return         
	 * @throws Exception
	 */
	public byte[] decrypt(byte[] arrB) throws Exception {
		return decryptCipher.doFinal(arrB);
	}

	/**
	 *      
	 *
	 * @param strIn
	 *                   
	 * @return        
	 * @throws Exception
	 */
	public String decrypt(String strIn) throws Exception {
		return new String(decrypt(hexStr2ByteArr(strIn)));
	}

	/**
	 *           ,            8    8     0,  8    8 
	 *
	 * @param arrBTmp
	 *                       
	 * @return      
	 * @throws java.lang.Exception
	 */
	private Key getKey(byte[] arrBTmp) throws Exception {
		//       8     (    0)
		byte[] arrB = new byte[8];

		//           8 
		for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {
			arrB[i] = arrBTmp[i];
		}

		//     
		Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");

		return key;
	}

	

}