String plain1= "Test";
byte[] cipher = SplashSecure.getInstance().encrypt2(plain1);
String plain2 = SplashSecure.getInstance().decrypt2(cipher);
平原=測試相同的純文本加密和解密犯規給使用AES/ECB/NoPadding
解密plainText2
後應等於plaintext
。但它不是。
加密/解密方法。
public void initKey(String key) {
String paddedKey = Utils.padString(key);
mKeyspec = new SecretKeySpec(Utils.getBytes(paddedKey), "AES/ECB/NoPadding");
// Utils.getBytes returns "paddedKey.getBytes("CP1252")"
}
public byte[] encrypt2(String data) {
try {
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, mKeyspec);
String paddedData = Utils.padString(data);
return cipher.doFinal(Utils.getBytes(paddedData));
} catch(InvalidKeyException e) {
e.printStackTrace();
// Series of catch blocks
}
return null;
}
public String decrypt2(byte[] cypherText) {
try {
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, mKeyspec);
byte[] plainTextBytes = cipher.doFinal(cypherText);
return Utils.getString(plainTextBytes);
// Utils.getString returns "new String(bytes, "CP1252");"
} catch(InvalidKeyException e) {
// Series of catch blocks.
}
return null;
}
編輯:
public static String padString(String source) {
char paddingChar = '\0';
int size = 16;
int padLength = size - source.length() % size;
for (int i = 0; i < padLength; i++) {
source += paddingChar;
}
return source;
}
編輯:
我試着去得到加密,解密跨Windows工作(其它客戶端,加密和服務器)和Android。 Windows客戶端是一個使用Rijndael類(http://svn.openfoundry.org/pcman/2007.06.03/Lite/Rijndael.h)和android使用的VC++應用程序http://www.cs.ucdavis.edu/~rogaway/ocb/ocb-java/Rijndael.java Windows客戶端已加密數據並將其存儲在服務器上。我需要爲Android構建一個客戶端,以獲取加密數據,解密並顯示給用戶。
我確定即時通訊使用正確的密鑰解密。
發佈'Utils.padString()'代碼也很有用 – iTech 2013-03-02 04:50:19
什麼是'plainText2'? – 2013-03-02 04:56:18
它用於測試加密..我檢查plaintext2等於明文。以確保加密工作正常.. – Ronnie 2013-03-02 05:01:18