java版3des加密程序,可与php兼容

时间:2009-03-29 22:35来源:未知 作者:admin 点击:次

代码: import java.io.UnsupportedEncodingException; import java.security.Key; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.Se

代码:

import java.io.UnsupportedEncodingException;

import java.security.Key;

import javax.crypto.Cipher;

import javax.crypto.SecretKeyFactory;

import javax.crypto.spec.DESedeKeySpec;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;

import sun.misc.BASE64Encoder;

public class DESCoder

{

private static BASE64Encoder base64 = new BASE64Encoder();

private static byte[] myIV = { 50, 51, 52, 53, 54, 55, 56, 57 };

//private static String strkey = "W9qPIzjaVGKUp7CKRk/qpCkg/SCMkQRu"; // 字节数必须是8的倍数

private static String strkey = "01234567890123456789012345678912";

public static String desEncrypt(String input) throws Exception

{

BASE64Decoder base64d = new BASE64Decoder();

DESedeKeySpec p8ksp = null;

p8ksp = new DESedeKeySpec(base64d.decodeBuffer(strkey));

Key key = null;

key = SecretKeyFactory.getInstance("DESede").generateSecret(p8ksp);

input = padding(input);

byte[] plainBytes = (byte[])null;

Cipher cipher = null;

byte[] cipherText = (byte[])null;

plainBytes = input.getBytes("UTF8");

cipher = Cipher.getInstance("DESede/CBC/NoPadding");

SecretKeySpec myKey = new SecretKeySpec(key.getEncoded(), "DESede");

IvParameterSpec ivspec = new IvParameterSpec(myIV);

cipher.init(1, myKey, ivspec);

cipherText = cipher.doFinal(plainBytes);

return removeBR(base64.encode(cipherText));

}

public static String desDecrypt(String cipherText) throws Exception

{

BASE64Decoder base64d = new BASE64Decoder();

DESedeKeySpec p8ksp = null;

p8ksp = new DESedeKeySpec(base64d.decodeBuffer(strkey));

Key key = null;

key = SecretKeyFactory.getInstance("DESede").generateSecret(p8ksp);

Cipher cipher = null;

byte[] inPut = base64d.decodeBuffer(cipherText);

cipher = Cipher.getInstance("DESede/CBC/NoPadding");

SecretKeySpec myKey = new SecretKeySpec(key.getEncoded(), "DESede");

IvParameterSpec ivspec = new IvParameterSpec(myIV);

cipher.init(2, myKey, ivspec);

byte[] output = removePadding(cipher.doFinal(inPut));

return new String(output, "UTF8");

}

private static String removeBR(String str) {

StringBuffer sf = new StringBuffer(str);

for (int i = 0; i < sf.length(); ++i)

{

if (sf.charAt(i) == '\n')

{

sf = sf.deleteCharAt(i);

}

}

for (int i = 0; i < sf.length(); ++i)

if (sf.charAt(i) == '\r')

{

sf = sf.deleteCharAt(i);

}

return sf.toString();

}

public static String padding(String str)

{

byte[] oldByteArray;

try

{

oldByteArray = str.getBytes("UTF8");

int numberToPad = 8 - oldByteArray.length % 8;

byte[] newByteArray = new byte[oldByteArray.length + numberToPad];

System.arraycopy(oldByteArray, 0, newByteArray, 0, oldByteArray.length);

for (int i = oldByteArray.length; i < newByteArray.length; ++i)

{

newByteArray[i] = 0;

}

return new String(newByteArray, "UTF8");

}

catch (UnsupportedEncodingException e)

{

System.out.println("Crypter.padding UnsupportedEncodingException");

}

return null;

}

public static byte[] removePadding(byte[] oldByteArray)

{

int numberPaded = 0;

for (int i = oldByteArray.length; i >= 0; --i)

{

if (oldByteArray[(i - 1)] != 0)

{

numberPaded = oldByteArray.length - i;

break;

}

}

byte[] newByteArray = new byte[oldByteArray.length - numberPaded];

System.arraycopy(oldByteArray, 0, newByteArray, 0, newByteArray.length);

return newByteArray;

}

public static void main(String args[])

{

try {

String desstr = DESCoder.desEncrypt("1qaz2ws");

String pstr = DESCoder.desDecrypt(desstr);

System.out.println("plainText:1qaz2ws");

System.out.println("Encode:"+desstr);

System.out.println("Decode:"+pstr);

} catch (Exception e) {

e.printStackTrace();

}

}

}

运行结果:

plainText:1qaz2ws

Encode:0GsXgYA8BuM=

Decode:1qaz2ws

和PHP的一样。

顶一下

(0)

0%

踩一下

(0)

0%

------分隔线----------------------------

php 3des 兼容java,java版3des加密程序,可与php兼容相关推荐

  1. php 3des 兼容java,PHP版3DES加解密类,可与java的3DES(DESede)加密方式兼容

    /** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author: Luo Hui (farmer.luo at gmail.com) * ...

  2. 3des加密 java php_java的3DES加密PHP7解密备忘录

    前言: 有一个项目需要跟甲方做接口,甲方使用的是java的3DES加密解密方式. 甲方加密解密部分截图代码: 填写图片摘要(选填) 第一步: 将甲方的iv转成PHP可以使用的偏移量 填写图片摘要(选填 ...

  3. java之php、Android、JAVA、C# 3DES加密解密

    异常如下 1.javax.crypto.BadPaddingException: Given final block not properly padded 1)要确认下是否加密和解密都是使用相同的填 ...

  4. 3、【java数据安全】对称加密的5种(DES/3DES、AES、IDEA、PBE)常见算法的使用示例

    java数据安全 系列文章 1.[java数据安全]数据安全之加密解密(base64.MD.SHA.DES.AES.IDEA.PBE.DH.RSA.EIGamal).数字签名(DSA.ECDSA)和数 ...

  5. Java课程设计——文本文件加密与解密软件设计与实现

    源文件链接: Java文本文件加密与解密-其它文档类资源-CSDN文库 摘要 随着现代网络技术的飞速发展,人们的个人信息.文件传递以及电子商务等方面都需要大力的保护,文件加密技术也应运而生.本次使用J ...

  6. Java中的AES加密和解密(CBC模式)

    通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法.在本文中,我们将讨论Java中具有CBC模 ...

  7. java中md5加密和解密_如何在java中实现md5加密和解密

    如何在java中实现md5加密和解密 关注:273  答案:1  mip版 解决时间 2021-01-19 20:37 提问者精神疯裂 2021-01-19 05:36 如何在java中实现md5加密 ...

  8. java 和 c md5加密_Java与C++实现同样的MD5加密算法

    1.Java版 package com.lyz.utils.common; import java.io.UnsupportedEncodingException; import java.secur ...

  9. Java语言程序设计基础篇-第10版-第一部分-程序设计基础)

    Java程序语言设计(基础篇)-第10版 第一部分 程序设计基础 第1章 计算机.程序和Java概述 1.1 引言 程序设计就是创建(或者开发)软件,软件也称为程序. 简言之,软件包含了指令,告诉计算 ...

最新文章

  1. 54. Leetcode 113. 路径总和 II (二叉树-二叉树路径和)
  2. Python:值传递,引用传递?不存在的,是赋值传递
  3. css黑科技有限公司,css动画之黑科技
  4. DButils工具使用笔记以及常见问题总结
  5. 我的设计模式之旅(1)——学习的原则和一些笔记
  6. 服务器主板点不亮排查
  7. delphi DBgrid 使用大全
  8. 第十课:栈的表示与实现
  9. iPhone 开源游戏引擎
  10. 内网主机通过外网地址访问内网服务器
  11. bch编码matlab,BCH码的编码方法.doc
  12. 各省简称 拼音 缩写_近50个拼音/英文缩写合集 (一)
  13. 中国色 - 中国传统色(zhongguose.com) 页面模仿
  14. VueCLI和Vite
  15. java 数据周期预测_预测算法 | Holt Winter季节性指数平滑法 附JAVA代码
  16. JS+HTML+CSS模仿微信界面发送信息
  17. cocos creator接入微信登陆sdk android篇
  18. 线上测评图形题技巧一
  19. Java基础:IO 流中的 flush
  20. 2021-07-14 深度学习基础与实践(二)

热门文章

  1. Oracle exp/imp导出导入命令及数据库备份
  2. acm steps chapter2总结
  3. 1 linux中解决文件已rm删除但空间不释放的案例
  4. postgreSQL数据库里面导入数据
  5. VBS操作 PDF时,常用快捷键(Adobe Acrobat Reader)
  6. php opcodes 还原代码,深入理解PHP原理之Opcodes(PHP执行代码会经过的4个步骤是什么)...
  7. 终端下vim无法输入问题解决
  8. nginx之206异常
  9. 【vue开发问题-解决方法】(五)vue Element UI 日期选择器获取日期格式问题 t.getTime is not a function
  10. 遇见Python.h: No such file or directory的解决方法