Android DES文字列暗号化後の復号化文字列
4699 ワード
データ保護のため、ソフトウェア内のデータを暗号化する必要がありますが、androidクライアントの復号時にエラーが発生しました.
個人的にはシステムの原因だと思っています.暗号化にはwindowシステムが使われるため、復号はandroid側で行われる.
漢字文字列の暗号化方法は異なり、同じ暗号化方法でも異なります.特にこの貼ることを出して、求める良い解決方法を望みます.
異なるシステムの一般的な方法が望ましい.
暗号化方法:参考http://www.icnote.com/DES-Encrypt/ありがとう
CODE:
個人的にはシステムの原因だと思っています.暗号化には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;
}
}