openssl java des_在Java中使用openssl加密
我有一个传统的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加密相关推荐
- java 压缩加密 github_关于Java:使用github中的AES-256-CBC加密
本问题已经有最佳答案,请猛点这里访问. 我想使用这些课程 https://github.com/fukata/AES-256-CBC-示例 在我的项目中,但是即使我不进行任何更改而对其进行编译,也会导 ...
- java中使用openssl生成的rsa公私钥进行数据加解密_使用openssl生成RSA公钥和私钥对...
在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...
- Java中使用OpenSSL生成的RSA公私钥进行数据加解密
本文出处:http://blog.csdn.net/chaijunkun/article/details/7275632,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在 ...
- java解码p7b证书文件,通过OpenSSL解码X509证书文件
在Windows平台下,如果要解析一个X509证书文件,最直接的办法是使用微软的CryptoAPI.但是在非Windows平台下,就只能使用强大的开源跨平台库OpenSSL了.一个X509证书通过Op ...
- 【Android 安全】DEX 加密 ( 代理 Application 开发 | 项目中配置 OpenSSL 开源库 | 使用 OpenSSL 开源库解密 dex 文件 )
文章目录 一.项目中配置 OpenSSL 开源库 二.OpenSSL 开源库解密参考代码 三.解密 dex 文件的 Java 代码 四.解密 dex 文件的 Jni 代码 参考博客 : [Androi ...
- 在Android NDK中使用OpenSSL
从 6.0 开始,Google 要求不要使用系统的 OpenSSL,请见:https://developer.android.com....因此,请不要再使用本文介绍的方法,请自行交叉编译 OpenS ...
- java string 占位符_驳《阿里「Java开发手册」中的1个bug》?
前两天写了一篇关于<阿里Java开发手册中的 1 个bug>的文章,评论区有点炸锅了,基本分为两派,支持老王的和质疑老王的. 首先来说,无论是那一方,我都真诚的感谢你们.特别是「二师兄」, ...
- SearchHit转成java对象_Java开发中最常犯的10个错误,你中招了吗?
http://www.programcreek.com/2014/05/top-10-mistakes-java-developers-make/ 阅读目录 Array转ArrayList 判断一个数 ...
- java mod %区别_Java中 % 与Math.floorMod() 区别详解
%为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...
最新文章
- SSH错误:packet_write_wait: Connection to 10.57.19.250 port 22: Broken pipe
- php 现货 结算算法,PHP算法逻辑:如何计算购买量?
- 所长不会用计算机,梅州市公安局: 两派出所所长不会电脑被停职
- css实现浏览历史小块
- 刷新DNS解析缓存+追踪+域名解析命令
- java8新特性(7)— Base64
- 常用的前端跨域的几种方式
- 网站安全配置---挂载路由导航
- stm32g474教程_(完整版)STM32F103通用教程
- Convert Sorted Array to Binary Search Tree(将有序数组转为二叉搜索树)
- TP5 使用redis
- 【交通流理论拟合】-速度流量拟合
- 那些黑天鹅教会我们的IT知识
- 鞋底php是什么材质,鞋底用EVA材料更好还是橡胶呢?
- java内网推送app,java – 使用来自app-engine的Parse发送推送通...
- 华为云麒麟arm架构docker启动redis报错:<jemalloc>: Unsupported system page size
- 人工智能导论:清览作业
- 小技巧(10):使用Python绘制激活函数(Sigmoid、Tanh、ReLU、PReLU)图像
- 嵌入式开发:嵌入式应用程序中的信任链简介
- java计算机毕业设计高原特色农产品网站设计源码+mysql数据库+系统+lw文档+部署
热门文章
- 苹果手机升级后怎么恢复旧版本_苹果手机误删了重要短信怎么恢复?
- 如何用计算机算10的-5次方,在excel中如何计算10的几次方呢
- js科学技术法,10的几次方
- android tcpstomp协议,StompProtocolAndroid 使用方法
- java中常用快捷键的用法
- oracle认证之OCI认证(含1z0-1072-21题库)
- 简易的备忘录便签工具,让桌面任务瞬间井然有序
- 成都榆熙教育电商:拼多多关于盗图搬用的知识有哪些?
- TF-IDF算法在实践中的应用
- pic16单片机c语言中断返回指令,Pic16f877 中断控制电路