我有一個用java編寫的新應用程序,需要從數據庫中讀取加密值。問題是數據庫中的所有值都使用ANSI x923填充方案的.NET代碼加密。我已經做了一些研究,看起來不像Java TripleDes庫有辦法指定這種填充方案。我想知道是否有人知道我是否正確,並且在java中不支持ANSI x923,或者有什麼方法可以使其工作。Java ANSI X923填充
2
A
回答
2
如果您使用Bouncy Castle JCE,它支持X923填充。你可以得到這樣的密碼(假設你使用CBC模式),
cipher = Cipher.getInstance("DESede/CBC/X9.23PADDING");
我不認爲Sun的JCE支持它。但是,您可以簡單地解密它,而不用填充並自己移除填充。使用X9.23,最後一個字節是添加的填充數量。所以你可以這樣做,
cipher = Cipher.getInstance("DESede/CBC/NOPADDING");
cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);
int outSize = cipher.getOutputSize(cipherText.length);
plainText = new byte[outSize];
length = cipher.update(cipherText, plainText, 0);
cipher.doFinal(plainText, length);
//Remove padding
int newLen = plainText.length - (plainText[plainText.length-1] & 0xFF);
byte[] data = new byte[newLen];
System.arraycopy(plainText, 0, data, 0, newLen);
0
Sun的文檔JCA Standard Algorithm Names中的「密碼算法填充」部分沒有提及該填充方案,因此它似乎不受支持。也就是說,Bouncy Castle提供了可以直接使用的X9.23填充的an implementation,如果您能夠使用外部庫並冒險脫離JCA的範圍。
相關問題
- 1. 使用ALTER設置ANSI填充關閉
- 2. 填充在Java
- 3. 用java填充洪水填充對象
- 4. Java - Swing - JOptionPane填充
- 5. Java JTable不填充DefaultTableModel
- 6. 填充從XML(JAVA)的HashMap
- 7. 在填充的Java Swing
- 8. 在JAVA中填充jTable
- 9. 在java中填充矩陣
- 10. 着填充陣列的Java
- 11. Java InvocationTargetException當填充TableView
- 12. Java的填充圖像
- 13. Java不添加PKCS5填充
- 14. 用XML填充表單(Java)
- 15. Java中的JPanel填充
- 16. 填充Java多維數組
- 17. Java哈希表填充
- 18. 無法填充的JAVA FX
- 19. Java swing - 填充大小
- 20. java的填充值列表
- 21. xml vs java LinearLayout填充
- 22. Java 2D着色/填充
- 23. 的Java 8 - 填充的ArrayList
- 24. 填充空數據在Java
- 25. Java位運算符(零填充移位)不填充零
- 26. 填充重寫後填充
- 27. sqlite預填充
- 28. 填充數據
- 29. 邊界填充和填充填充之間的區別
- 30. 可變長度填充和填充填充梯度
很好的發現,第一種方法。我簡單地瀏覽了Bouncy Castle API,看看他們的JCE提供商是否支持這種方式,但我看起來不夠努力。 – laz 2009-08-25 20:26:07