每次我使用相同的密碼運行安裝方法時,我每次都會得到不同的密鑰結果。我正在使用關鍵結果來檢查解密密碼是否正確,以防止不必要的解密。使用相同的密碼在Android中獲取不同的加密密鑰結果
我在java中運行下面的代碼,我沒有問題,但在Android中它產生了不同的鍵的問題。有人能告訴我什麼是問題以及如何解決這個問題。我想在Android和Java之間有共同的軟件。
,當我在Android上運行的程序中,我拿到鑰匙[email protected]
當我在Java中運行該程序,我得到關鍵 com.sun.crypto.Provider.PBEKey @ 12345678
private static byte[] bytes;
Cipher ecipher;
Cipher dcipher;
// 8-byte Salt
byte[] salt = {
(byte)0xA9, (byte)0x9B, (byte)0xC8, (byte)0x32,
(byte)0x56, (byte)0x35, (byte)0xE3, (byte)0x03
};
// Iteration count
int iterationCount = 19;
public String setup(String passPhrase)
{
String output = null;
try {
// Create the key
KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount);
SecretKey key = SecretKeyFactory.getInstance(
"PBEWithMD5AndDES").generateSecret(keySpec);
ecipher = Cipher.getInstance(key.getAlgorithm());
dcipher = Cipher.getInstance(key.getAlgorithm());
// Prepare the parameter to the ciphers
AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);
// Create the ciphers
ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
// print key
System.out.println("key = " + key);
System.out.println("paramSpec = " + paramSpec);
output = key.toString();
// showToast("setting up key " + output);
// showToast("key size " + output.length());
System.out.println("key Size " + output.length());
} catch (java.security.InvalidAlgorithmParameterException e) {
} catch (java.security.spec.InvalidKeySpecException e) {
} catch (javax.crypto.NoSuchPaddingException e) {
} catch (java.security.NoSuchAlgorithmException e) {
} catch (java.security.InvalidKeyException e) {
}
return output;
}
記住'java.xml.bind'等不適用於Android,但也有其他的方法來轉換爲十六進制( 'BigInteger','String.format()'等)。 –
非常感謝。我已經更新了答案。 –