app登录,登录的密码要用DES加密,服务器是用erlang,客户端要同时支持多平台(Android、iOS)。首先,Java端的DES加密的实现方式,

少说废话了,直接上代码,如下:

public class DES {
private static byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 }; public static String encryptDES(String encryptString, String encryptKey)
throws Exception {
IvParameterSpec zeroIv = new IvParameterSpec(iv);
SecretKeySpec key = new SecretKeySpec(encryptKey.getBytes(), "DES");
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
byte[] encryptedData = cipher.doFinal(encryptString.getBytes());
return Base64.encode(encryptedData);
}
}
上述代码用到了一个Base64的编码类,其代码的实现方式如下:
public class Base64 {
private static final char[] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
.toCharArray(); /**
* data[]进行编码
*
* @param data
* @return
*/
public static String encode(byte[] data) {
int start = 0;
int len = data.length;
StringBuffer buf = new StringBuffer(data.length * 3 / 2); int end = len - 3;
int i = start;
int n = 0; while (i <= end) {
int d = ((((int) data[i]) & 0x0ff) << 16)
| ((((int) data[i + 1]) & 0x0ff) << 8)
| (((int) data[i + 2]) & 0x0ff); buf.append(legalChars[(d >> 18) & 63]);
buf.append(legalChars[(d >> 12) & 63]);
buf.append(legalChars[(d >> 6) & 63]);
buf.append(legalChars[d & 63]); i += 3; if (n++ >= 14) {
n = 0;
buf.append(" ");
}
} if (i == start + len - 2) {
int d = ((((int) data[i]) & 0x0ff) << 16)
| ((((int) data[i + 1]) & 255) << 8); buf.append(legalChars[(d >> 18) & 63]);
buf.append(legalChars[(d >> 12) & 63]);
buf.append(legalChars[(d >> 6) & 63]);
buf.append("=");
} else if (i == start + len - 1) {
int d = (((int) data[i]) & 0x0ff) << 16; buf.append(legalChars[(d >> 18) & 63]);
buf.append(legalChars[(d >> 12) & 63]);
buf.append("==");
} return buf.toString();
}
 注意下:这里用的des加密,cbc模式,填充方式是:PKCS5Padding,还需注意下key和Ivev

然后,服务器由erlang解密,注意上述的加密模式,填充方式,以及key和Ivev的值需要保持一样。

代码如下:

-module(des).

-define(DES_KEY, des_key).
-define(CHARSET, charset). -export([encrypto_des_cbc/1,decrypto_des_cbc/1,
encrypto_des_cbc/3,decrypto_des_cbc/3]). encrypto_des_cbc(PlainText) ->
Key = "xxxxxxxx",
Charset = utf8,
encrypto_des_cbc(PlainText, Key, Charset). decrypto_des_cbc(Ciphertext) ->
Key = "xxxxxxxx",
Charset = utf8,
decrypto_des_cbc(Ciphertext, Key, Charset). %% des 加密
encrypto_des_cbc(PlainText, Key, Charset) ->
Key2 = unicode:characters_to_list(Key, Charset),
Ivec = <<1,2,3,4,5,6,7,8>>, %% 按DES规则,补位
N = 8 - (byte_size(list_to_binary(PlainText)) rem 8),
PlainText2 = lists:append(PlainText, get_padding(N)),
%% 加密
Ciphertext = crypto:block_encrypt(des_cbc, Key2, Ivec, PlainText2),
{ok, Ciphertext}. %% des 解密
decrypto_des_cbc(Ciphertext, Key, Charset) -> Key2 = unicode:characters_to_list(Key, Charset),
Ivec = <<1,2,3,4,5,6,7,8>>,
case is_list(Ciphertext) of
true ->
CipherBin = list_to_binary(Ciphertext);
false ->
CipherBin = Ciphertext
end, PlainAndPadding = crypto:block_decrypt(des_cbc,Key2,Ivec,CipherBin),
<<PosLen/integer>> = binary_part(PlainAndPadding,{size(PlainAndPadding),-1}),
Len = byte_size(PlainAndPadding) - PosLen,
<<PlainText:Len/binary, _:PosLen/binary>> = PlainAndPadding,
{ok, PlainText}. get_padding(N) ->
case N of
0 ->
get_padding2(8,8,[]);
Num ->
get_padding2(Num,Num,[])
end. get_padding2(N, Val, PaddingList) when N > 0 ->
get_padding2(N-1, Val, [Val] ++ PaddingList);
get_padding2(N, _Val,PaddingList) when N == 0 ->
PaddingList.
这样,server端就可以解密了.

注意:java的des加密的最后有个base64的转码,server的解密,首先需要base64:decode,然后再是des的解密 decode.

这里可扩展AES加解密和对应模式等等.

这个的加解密的执行的shell截图没有上传,小伙伴可以试下~

java和erlang之间的DES加解密的更多相关文章

  1. Java拓展教程:文件DES加解密

    Java拓展教程:文件加解密 Java中的加密解密技术 加密技术根据一般可以分为对称加密技术和非对称加密技术.对称加密技术属于传统的加密技术,它的加密和解密的密钥是相同的,它的优点是:运算速度快,加密 ...

  2. java与IOS之间的RSA加解密

    很简单的一个需求,ipad端给密码RSA加密,传到java后台,解密.RSA加密算法是基于一个密钥对的,分为公钥和私钥,一般情况公钥加密,私钥解密,但也可私钥加密,公钥解密.还可以验签,就是先用私钥对 ...

  3. 一个java的DES加解密类转换成C#

    原文:一个java的DES加解密类转换成C# 一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //i ...

  4. Java Des加解密方法(c#加密Java解密)

    最近我们用Java把一个用.net编写的老系统重新做了翻版,但是登录还是用.net的登录.这样就会遇到一个比较棘手的问题,我们登录用的cookie信息都是.net用des加密的,但我们不得不用Java ...

  5. DES加解密 cbc模式 的简单讲解 && C++用openssl库来实现的注意事项

    DES cbc是基于数据块加密的.数据块的长度为8字节64bit.以数据块为单位循环加密,再拼接.每个数据块加密的秘钥一样,IV向量不同.第一个数据快所需的IV向量,需要我们提供,从第二个数据块开始, ...

  6. Node.js的DES加解密和MD5加密

    最基本的就是经常用的md5加密算法 代码如下 var  MD5=function (data) {        var _encrymd5 = require('crypto').createHas ...

  7. DES加解密算法Qt实现

      算法解密qt加密table64bit [声明] (1) 本文源码 大部分源码来自:DES算法代码.在此基础上,利用Qt编程进行了改写,实现了DES加解密算法,并添加了文件加解密功能.在此对署名为b ...

  8. JavaScript与C#互通的DES加解密算法

    原文地址:传送门 本文提供了一个能使JavaScript与C#互通的DES加解密算法的实现,在前台页面中用JavaScript版本的DES算法将数据加密之后,传到服务器端,在服务器端可用C#版本的DE ...

  9. PHP 基础篇 - PHP 中 DES 加解密详解

    一.简介 DES 是对称性加密里面常见一种,全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法.密钥长度是64位(bit),超过位数密钥被忽略.所谓对 ...

随机推荐

  1. [LeetCode] Linked List Cycle II 链表环起始位置

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...

  2. 转载自——Json.net动态序列化以及对时间格式的处理

    关于我工作中对Json处理的东西 第一:动态序列化类 第二:时间格式处理 通常我们一个类里 可能有十到更多的属性,但是我们序列化通常只需要序列化其中的 三到五个这样的话就会有多余的数据 如果 我只想序 ...

  3. Android项目搭建最常用的架构解密

    在完成android项目的时候第一步都是要搭建架构,下面我们来展示一下最常用的架构结构的: 源码下载地址: https://download.csdn.net/download/heishuai123 ...

  4. UVA 11059 Maximum Product【三层暴力枚举起终点】

    [题意]:乘积最大的子序列.n∈[1,10],s∈[-10,10] [代码]: #include<bits/stdc++.h> using namespace std; int a[105 ...

  5. 洛谷 P1784 数独[DFS/回溯]

    To 洛谷.1784 数独类似题:CODEVS.4966 简单数独(4*4数独) CODEVS.2924 数独挑战) 题目描述 数独是根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行 ...

  6. Java 字符集,编码、解码

    1. 计算机中文件.数据底层都是基于二进制的. 计算机底层并没有文本文件.图片文件之分,它只是记录着每个文件的二进制序列. 字符集:包含着字符和二进制序列之间的对应关系,一个字符对应一个二进制序列. ...

  7. 创建maven项目是其中的group id和artifact id怎么填写

    groupid和artifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找. groupId一般分为多个段 ...

  8. How To Use Git Source Control with Xcode in iOS 6

    This tutorial is by Malek Trabelsi, a passionate iOS developer from Tunisia focused primarily on mob ...

  9. 在线更新dede程序后 网站出现错误 DedeCMS Error:Tag disabled:"php" more...!

    dedecms出现DedeCMS Error:Tag disabled:php原因解决 ------------------------------------------------------- ...

  10. ylb: 触发器(Trigger)之Instead Of触发器 [注:没内容]

    ylbtech-SQL Server:SQL Server-触发器(Trigger)之Instead Of触发器 触发器(Trigger)之Instead Of触发器 [注:没内容]. ylb: 触发 ...