我有一個預先編寫的代碼,用於對給定的純文本進行加密,反之亦然。無法更改Base64解碼器中的密碼密鑰
該類有3種方法,其中可以分別使用2種方法進行加密和解密。
public class SqlCipherUtil {
private Cipher ecipher;
private Cipher dcipher;
public String encryptString(String pStrPlainText) {
try {
generateKey();
byte[] utf8 = pStrPlainText.getBytes("UTF8");
byte[] enc = this.ecipher.doFinal(utf8);
return new BASE64Encoder().encode(enc);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public String decryptString(String pStrCipherText){
try {
generateKey();
byte[] dec = new BASE64Decoder().decodeBuffer(pStrCipherText);
byte[] utf8 = this.dcipher.doFinal(dec);
return new String(utf8, "UTF8");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* This method is used to generate the encrypted key.
*/
private void generateKey() {
try {
byte[] decodedStr = new BASE64Decoder().decodeBuffer("rA/LUdBA/hA=");
SecretKey key = new SecretKeySpec(decodedStr, "DES");
this.ecipher = Cipher.getInstance("DES");
this.dcipher = Cipher.getInstance("DES");
this.ecipher.init(1, key);
this.dcipher.init(2, key);
} catch (Exception e) {
e.printStackTrace();
}
}
}
鍵存在於類的不能在線路byte[] decodedStr = new BASE64Decoder().decodeBuffer("rA/LUdBA/hA=");
, 改爲任何其他鍵 和它給一個異常。
java.security.InvalidKeyException: Invalid key length: 9 bytes
at com.sun.crypto.provider.DESCipher.engineGetKeySize(DashoA13*..)
at javax.crypto.Cipher.b(DashoA13*..)
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
我嘗試了下面的代碼,我正好在數組中獲得8個字節。
public static void main(String[] args) throws IOException {
byte[] decodedStr = new BASE64Decoder().decodeBuffer("rA/LUdBA/hA=");
for(byte b : decodedStr){
System.out.print(b);
System.out.print(" ");
}
}
}
關鍵的任何其他組合將使字節數組的大小超過8比7
什麼是背後得到字節數組的大小8的概念少了?
應該如何使用自定義組合鍵或我們的自定義生成的鍵?
請回答這兩個問題。
在初始化代碼對我的作品......你確定嗎?你已經準備好了那些代碼? –
如果密鑰只是「rA/LUdBA/hA =」,代碼對我來說工作正常。 如果我們改變密鑰,我會得到一個異常。 嘗試一下自己,將密鑰更改爲不同的密鑰, 在主程序中嘗試調用 新的SqlCipherUtil()。encryptString(「jon-skeet」); 你會得到一個例外。 – bali208