- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 Java 中使用 DESede 加密,我想在 C++ 中使用 OpenSSL 的 API 进行相同的加密。
Java代码:
String secretKey = "abcdefghijklmnopqrstuvwx";
byte[] bytes = secretKey.getBytes("UTF-8");
SecretKey key = new SecretKeySpec(bytes, "DESede");
Cipher ecipher = Cipher.getInstance("DESede");
ecipher.init(Cipher.ENCRYPT_MODE, key);
String input = "holahola1";
byte[] utf8 = input.getBytes("UTF8");
byte[] enc = ecipher.doFinal(utf8); // Encrypt
输出:[94, -45, 64, -105, 99, -55, 99, -42, 95, 122, 72, 117, -119, 95, -43, 40]
C++代码:
unsigned char intext[256], outtext[256];
memset(intext, 0, sizeof(intext));
memset(outtext, 0, sizeof(outtext));
char *output = (char *)outtext;
DES_key_schedule keyschedc1;
DES_key_schedule keyschedc2;
DES_key_schedule keyschedc3;
DES_cblock keyc1;
DES_cblock keyc2;
DES_cblock keyc3;
DES_string_to_key("abcdefgh", &keyc1);
DES_string_to_key("ijklmnop", &keyc2);
DES_string_to_key("qrstuvwx", &keyc3);
DES_set_key((DES_cblock *)keyc1, &keyschedc1);
DES_set_key((DES_cblock *)keyc2, &keyschedc2);
DES_set_key((DES_cblock *)keyc3, &keyschedc3);
strcpy((char *)intext, "holahola1");
for (int i=0; i<16; i += 8)
{
DES_ecb3_encrypt((DES_cblock *)(intext + i),
(DES_cblock *)(outtext + i),
&keyschedc1, &keyschedc2,
&keyschedc3,DES_ENCRYPT);
}
输出:[30 55 9 -58 -18 -65 -66 123 -32 72 30 110 120 69 101 -81]
怎么了?有人能帮我吗?谢谢!
最佳答案
我明白了。 Java DESede 加密,使用带 ecb 模式的三重 DES,并使用 PKCS#5 填充。因此,我使用 PKCS#5 填充我的文本,它解决了所有问题。
示例 C++ 代码:
unsigned char intext[256], outtext[256];
memset(intext, 0x07, sizeof(intext)); //PKCS#5 padding (See documentation)
memset(outtext, 0, sizeof(outtext));
char *output = (char *)outtext;
DES_key_schedule keyschedc1;
DES_key_schedule keyschedc2;
DES_key_schedule keyschedc3;
DES_cblock keyc1;
DES_cblock keyc2;
DES_cblock keyc3;
DES_set_key((DES_cblock *)"abcdefgh", &keyschedc1);
DES_set_key((DES_cblock *)"ijklmnop", &keyschedc2);
DES_set_key((DES_cblock *)"qrstuvwx", &keyschedc3);
strcpy((char *)intext, "holahola1");
for (int i=0; i<16; i += 8)
{
DES_ecb3_encrypt((DES_cblock *)(intext + i),
(DES_cblock *)(outtext + i),
&keyschedc1, &keyschedc2,
&keyschedc3,DES_ENCRYPT);
}
关于Java DESede 加密,OpenSSL 等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9038298/
我正在开发一个项目,该项目使用 Java 服务来加密我从网络服务收到的签名。我需要用 JavaScript 替换这段代码。 这是我使用 JavaScript 的地方 http://jsfiddle.n
我在 Java 中使用 DESede 加密,我想在 C++ 中使用 OpenSSL 的 API 进行相同的加密。 Java代码: String secretKey = "abcdefghijk
我们有一个与java相关的应用程序,它以加密形式将密码存储在数据库中,因此我们需要解密并使用它进行身份验证,并再次加密密码并存储在数据库中以创建新用户。基本上我们使用加密/密码验证的解密标准。它最初是
我正在尝试在 iOS 上实现一种加密方式。以匹配在 JAVA 上运行的那个。 但我尝试的每件事都会导致不同的加密模式 这是我用于加密的 Java 代码: public static String
我在理解java和python的三重Des算法之间的概念时遇到问题。在 java 中,加密 key 的长度为 48 个字符,而在 python 中则不能应用相同的 key 。我尝试了提到的两个建议 h
我必须匹配的输出来自 Java DESede,使用 2005 年的 BouncyCaSTLe Jar ...我非常接近... 这是我在 Java 中的输出(这是正确的),后面是我在 C# 中的输出..
我尝试兼容 C# 和 Java 的加密/解密。 据我所知,默认模式在 Java 中是“ecb/pkcs5”,在 C# 中是“cbc/pkcs7”。 所以我匹配这些东西。 第一个问题是 PKCS7 和
我写了这段代码,我的 key 是:“ooWqEPcw7KR/h/JIbrFCRHiEVaybvnB2”。 try { Base64Decoder base64Decod
我正尝试在 Java 中使用 TripleDES 加密。来自Wikipedia article在 Keying Options 下,我想使用选项 1,其中 所有三个键都是独立的。 来自Cipher d
我正在尝试将 Java 的 DESede 解密转换为 PHP 的版本。然而,对于相同的输入,PHP 无法提供相同的输出。 Java: public class ThreeDES { priva
代码使用 DiffieHellman 和 DES 加密。DES 不安全,我想使用 DESede 或 AES。 SecretKeyFactory skf = SecretKeyFactory.getIn
首先我要说声谢谢... 我写了一个程序,用枚举来加密和解密。枚举有 AES、BlowFish、DESede。我的程序将支持这 3 种加密算法。 然后我想用SecretKeyFactory生成一个Sec
加密文本是用JAVA完成的(我们根本没有JAVA背景) 解密将用 C# 进行,代码如下 public static string DecryptString(string Message, strin
在我的 Android 应用程序中,我想使用 DESede/CBC/PKCS5Padding 加密密码,我的解决方案适用于 Lollipop(5.x)、Android KitKat(4.4.x) 和
我知道这个问题经常被问到,但我已经检查了我在 Stack Overflow 中找到的所有内容,但没有找到解决我的问题的方法。 我正在使用 DESede 进行加密和解密,并采用外部 24 字节 key
我想创建一个大小为 128 位的 TDES key ,因此我使用 keytool 通过以下命令生成 jceks。当我在 C:\Program Files (x86)\Java\jdk1.8.0_25\
我是一名优秀的程序员,十分优秀!