我有一个传统的C模块,它使用openssl库提供加密/解密(DES加密).我正在尝试将该代码转换为

java,我不想依赖DLL,JNI等…

C代码看起来像:

des_string_to_key(reinterpret_cast(key1), &initkey);

des_string_to_key(reinterpret_cast(key2), &key);

key_sched(&key, ks);

// ...

des_ncbc_encrypt(reinterpret_cast(tmp.c_str()),

reinterpret_cast< unsigned char *>(encrypted_buffer), tmp.length(), ks, &initkey,

DES_ENCRYPT);

return base64(reinterpret_cast(encrypted_buffer), strlen(encrypted_buffer));

Java代码如下所示:

Cipher ecipher;

try {

ecipher = Cipher.getInstance("DES");

SecretKeySpec keySpec = new SecretKeySpec(key, "DES");

ecipher.init(Cipher.ENCRYPT_MODE, keySpec);

byte[] utf8 = password.getBytes("UTF8");

byte[] enc = ecipher.doFinal(utf8);

return new sun.misc.BASE64Encoder().encode(enc);

}

catch {

// ...

}

所以我可以很容易地在Java中进行DES加密,但是如何使用完全不同的方法获得与上述代码相同的结果?让我烦恼的是,C版本使用2个密钥,而Java版本只使用1个密钥.

在CBC模式下关于DES的答案非常令人满意,但我还不能让它工作.

以下是有关原始代码的更多详细信息:

unsigned char key1 [10] = {0};

unsigned char key2 [50] = {0};

int i;

for (i=0;i<8;i++)

key1[i] = 31+int((i*sqrt((double)i*5)))%100;

key1[9]=0;

for (i=0;i<48;i++)

key2[i] = 31+int((i*i*sqrt((double)i*2)))%100;

key2[49]=0;

...

// Initialize encrypted buffer

memset(encrypted_buffer, 0, sizeof(encrypted_buffer));

// Add begin Text and End Text to the encrypted message

std::string input;

const char beginText = 2;

const char endText = 3;

input.append(1,beginText);

input.append(bufferToEncrypt);

input.append(1,endText);

// Add padding

tmp.assign(desPad(input));

des_ncbc_encrypt(reinterpret_cast(tmp.c_str()),

reinterpret_cast< unsigned char *>(encrypted_buffer), tmp.length(), ks, &initkey,

DES_ENCRYPT);

...

从我所读到的,密钥应该是56(或64,我不清楚)位长,但这里它长48个字节.

openssl java des_在Java中使用openssl加密相关推荐

  1. java 压缩加密 github_关于Java:使用github中的AES-256-CBC加密

    本问题已经有最佳答案,请猛点这里访问. 我想使用这些课程 https://github.com/fukata/AES-256-CBC-示例 在我的项目中,但是即使我不进行任何更改而对其进行编译,也会导 ...

  2. java中使用openssl生成的rsa公私钥进行数据加解密_使用openssl生成RSA公钥和私钥对...

    在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...

  3. Java中使用OpenSSL生成的RSA公私钥进行数据加解密

    本文出处:http://blog.csdn.net/chaijunkun/article/details/7275632,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在 ...

  4. java解码p7b证书文件,通过OpenSSL解码X509证书文件

    在Windows平台下,如果要解析一个X509证书文件,最直接的办法是使用微软的CryptoAPI.但是在非Windows平台下,就只能使用强大的开源跨平台库OpenSSL了.一个X509证书通过Op ...

  5. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 项目中配置 OpenSSL 开源库 | 使用 OpenSSL 开源库解密 dex 文件 )

    文章目录 一.项目中配置 OpenSSL 开源库 二.OpenSSL 开源库解密参考代码 三.解密 dex 文件的 Java 代码 四.解密 dex 文件的 Jni 代码 参考博客 : [Androi ...

  6. 在Android NDK中使用OpenSSL

    从 6.0 开始,Google 要求不要使用系统的 OpenSSL,请见:https://developer.android.com....因此,请不要再使用本文介绍的方法,请自行交叉编译 OpenS ...

  7. java string 占位符_驳《阿里「Java开发手册」中的1个bug》?

    前两天写了一篇关于<阿里Java开发手册中的 1 个bug>的文章,评论区有点炸锅了,基本分为两派,支持老王的和质疑老王的. 首先来说,无论是那一方,我都真诚的感谢你们.特别是「二师兄」, ...

  8. SearchHit转成java对象_Java开发中最常犯的10个错误,你中招了吗?

    http://www.programcreek.com/2014/05/top-10-mistakes-java-developers-make/ 阅读目录 Array转ArrayList 判断一个数 ...

  9. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

最新文章

  1. SSH错误:packet_write_wait: Connection to 10.57.19.250 port 22: Broken pipe
  2. php 现货 结算算法,PHP算法逻辑:如何计算购买量?
  3. 所长不会用计算机,梅州市公安局: 两派出所所长不会电脑被停职
  4. css实现浏览历史小块
  5. 刷新DNS解析缓存+追踪+域名解析命令
  6. java8新特性(7)— Base64
  7. 常用的前端跨域的几种方式
  8. 网站安全配置---挂载路由导航
  9. stm32g474教程_(完整版)STM32F103通用教程
  10. Convert Sorted Array to Binary Search Tree(将有序数组转为二叉搜索树)
  11. TP5 使用redis
  12. 【交通流理论拟合】-速度流量拟合
  13. 那些黑天鹅教会我们的IT知识
  14. 鞋底php是什么材质,鞋底用EVA材料更好还是橡胶呢?
  15. java内网推送app,java – 使用来自app-engine的Parse发送推送通...
  16. 华为云麒麟arm架构docker启动redis报错:<jemalloc>: Unsupported system page size
  17. 人工智能导论:清览作业
  18. 小技巧(10):使用Python绘制激活函数(Sigmoid、Tanh、ReLU、PReLU)图像
  19. 嵌入式开发:嵌入式应用程序中的信任链简介
  20. java计算机毕业设计高原特色农产品网站设计源码+mysql数据库+系统+lw文档+部署

热门文章

  1. 苹果手机升级后怎么恢复旧版本_苹果手机误删了重要短信怎么恢复?
  2. 如何用计算机算10的-5次方,在excel中如何计算10的几次方呢
  3. js科学技术法,10的几次方
  4. android tcpstomp协议,StompProtocolAndroid 使用方法
  5. java中常用快捷键的用法
  6. oracle认证之OCI认证(含1z0-1072-21题库)
  7. 简易的备忘录便签工具,让桌面任务瞬间井然有序
  8. 成都榆熙教育电商:拼多多关于盗图搬用的知识有哪些?
  9. TF-IDF算法在实践中的应用
  10. pic16单片机c语言中断返回指令,Pic16f877 中断控制电路