Java DESede加密,相当于OpenSSL
Java DESede encrypt, OpenSSL equivalent
我在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,95122,72117,-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);
}
请改用DES_ecb3_encrypt,因为您使用的是3个单独的密钥。
byte[] bytes = secretKey.getBytes("UTF-8");
SecretKey key = new SecretKeySpec(bytes, "**DESede/PKCS#5**");
相关文章:
- 相当于LocaleMatcher的ICU4C
- 相当于 pybind11 中的 boost::p ython py::scope().attr()
- C++相当于整数的 #define
- 什么相当于 Kotlin 上的C++指针?
- 相当于 Java 中的C++结构
- 霓虹灯中的_mm_hadd_ps相当于什么?
- 相当于 VirtualAlloc() 的_set_new_handler?
- 对于 poco 库来说,Boost_USE_STATIC_LIBS相当于什么?
- 什么 clang-format 相当于 rustfmt 的 indent_style=Block?
- 犰狳相当于 A(find(A<0)) = 0
- 相当于C++运算符中的 Python
- C++ C 的双指针相当于什么?
- 相当于Linux fifo的Windows
- 相当于numpy.exexpand_dims()和numpy.contenate()的C++
- 从 MATLAB 到 C++:相当于带有选项 'remove' 的 bwmorph
- Visual Studio 编译器的 record-gcc-switch 相当于什么?
- 相当于Windows/MSVC上的段错误?
- C++相当于Python的__init__
- OpenCV absdiff 相当于从 c++ 到 Python
- Java DESede加密,相当于OpenSSL