Java ANSI X923 填充

标签 java .net interop cryptography

我有一个用 java 编写的新应用程序,需要从数据库中读取加密值。问题是数据库中的所有值都由使用 ANSI x923 填充方案的 .NET 代码加密。我做了一些研究,看起来 Java TripleDes 库没有指定此填充方案的方法。我想知道是否有人知道我是否正确并且 ANSI x923 在 Java 中不受支持,或者是否有办法让它工作。

最佳答案

如果您使用 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);

关于Java ANSI X923 填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1329730/

相关文章:

java - 通过线程将变量从客户端发送到服务器

java - AssertJ:如何使 JsonNode 比较处理 IntNode 和 LongNode 相同?

java - 为什么,在 Java 算法中,上溢或下溢永远不会抛出异常?

c# - F# OOP - 实现接口(interface) - 私有(private)和方法名称问题

.net - 如何使用 tlbimp.exe 的/keycontainer 开关?

asp.net - 如何在使用 VB 6.0 从 ASPX 页面调用的 IIS 7.0(Windows Server 2008 R2) 中调试 Com dll(通过 Interop 访问)

java - 使用 Hibernate 从 CSV 文件更新 Oracle DB 数据

java - 当我要求用户输入时,我无法从数组中删除元素

c# - 如何在不同的编程语言中使用 C# 方法

c# - 如何在 .NET MVC 中返回 Backbone 集合