我有一個用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. 將錶轉換爲Ansi填充
- 2. 使用ALTER設置ANSI填充關閉
- 3. 填充在Java
- 4. Java ArrayList填充
- 5. 用java填充洪水填充對象
- 6. 填充映射 - java
- 7. 填充Java數組
- 8. Java - Swing - JOptionPane填充
- 9. 爲什麼在SQL Server中默認啓用ANSI填充?
- 10. Java JTable不填充DefaultTableModel
- 11. 填充垂直矩陣Java
- 12. Java swing - 填充大小
- 13. Java哈希表填充
- 14. 填充Java多維數組
- 15. Java InvocationTargetException當填充TableView
- 16. Java掃描線填充
- 17. 在java中填充矩陣
- 18. xml vs java LinearLayout填充
- 19. 在填充的Java Swing
- 20. Java中的JPanel填充
- 21. Java 2D着色/填充
- 22. 的Java 8 - 填充的ArrayList
- 23. 填充從XML(JAVA)的HashMap
- 24. 從GUI填充java集合
- 25. java的填充值列表
- 26. 無法填充的JAVA FX
- 27. Java - JTextField填充所有幀
- 28. 在java中填充數組
- 29. Java AbstractTableModel動態填充行
- 30. Java中的遞歸填充
很好的發現,第一種方法。我簡單地瀏覽了Bouncy Castle API,看看他們的JCE提供商是否支持這種方式,但我看起來不夠努力。 – laz 2009-08-25 20:26:07