找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 239|回复: 0
打印 上一主题 下一主题

兼容PHP和Java的des加密解密代码分享

[复制链接]

2500

主题

2513

帖子

7520

积分

论坛元老

Rank: 8Rank: 8

积分
7520
跳转到指定楼层
楼主
发表于 2018-2-14 05:56:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            php代码:
key = $key;
                if($iv == 0)
                {
                        $this->iv = $key;
                }
                else
                {
                        $this->iv = $iv;
                }
        }

        //加密
        function encrypt($str)
        {               
                $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );
                $str = $this->pkcs5Pad ( $str, $size );

                $data=mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv);
                //$data=strtoupper(bin2hex($data)); //返回大写十六进制字符串
                return base64_encode($data);
        }

        //解密
        function decrypt($str)
        {
                $str = base64_decode ($str);
                //$strBin = $this->hex2bin( strtolower($str));
                $str = mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_DECRYPT, $this->iv );
                $str = $this->pkcs5Unpad( $str );
                return $str;
        }

        function hex2bin($hexData)
        {
                $binData = "";
                for($i = 0; $i  strlen ( $text ))
                        return false;
                if (strspn ( $text, chr ( $pad ), strlen ( $text ) - $pad ) != $pad)
                        return false;
                return substr ( $text, 0, - 1 * $pad );
        }
}
$str = 'abcd';
$key= 'asdfwef5';
$crypt = new DES($key);
$mstr = $crypt->encrypt($str);
$str = $crypt->decrypt($mstr);

echo $str.'  '.$mstr;

?>
java代码:
package com.test;

import it.sauronsoftware.base64.Base64;

import java.security.Key;
import java.security.SecureRandom;
import java.security.spec.AlgorithmParameterSpec;

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;

public class Main
{
public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding";
/**
  * DES算法,加密
  *
  * @param data 待加密字符串
  * @param key 加密私钥,长度不能够小于8位
  * @return 加密后的字节数组,一般结合Base64编码使用
  * @throws CryptException 异常
  */
public static String encode(String key,String data) throws Exception
{
  return encode(key, data.getBytes());
}
/**
  * DES算法,加密
  *
  * @param data 待加密字符串
  * @param key 加密私钥,长度不能够小于8位
  * @return 加密后的字节数组,一般结合Base64编码使用
  * @throws CryptException 异常
  */
public static String encode(String key,byte[] data) throws Exception
{
  try
  {
                 DESKeySpec dks = new DESKeySpec(key.getBytes());

                 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
   //key的长度不能够小于8位字节
   Key secretKey = keyFactory.generateSecret(dks);
   Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
   IvParameterSpec iv = new IvParameterSpec(key.getBytes());
   AlgorithmParameterSpec paramSpec = iv;
   cipher.init(Cipher.ENCRYPT_MODE, secretKey,paramSpec);

   byte[] bytes = cipher.doFinal(data);


//   return byte2hex(bytes);
   return new String(Base64.encode(bytes));
  } catch (Exception e)
  {
   throw new Exception(e);
  }
}

/**
  * DES算法,解密
  *
  * @param data 待解密字符串
  * @param key 解密私钥,长度不能够小于8位
  * @return 解密后的字节数组
  * @throws Exception 异常
  */
public static byte[] decode(String key,byte[] data) throws Exception
{
  try
  {
          SecureRandom sr = new SecureRandom();
                 DESKeySpec dks = new DESKeySpec(key.getBytes());
                 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
   //key的长度不能够小于8位字节
   Key secretKey = keyFactory.generateSecret(dks);
   Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
   IvParameterSpec iv = new IvParameterSpec(key.getBytes());
   AlgorithmParameterSpec paramSpec = iv;
   cipher.init(Cipher.DECRYPT_MODE, secretKey,paramSpec);
   return cipher.doFinal(data);
  } catch (Exception e)
  {
   throw new Exception(e);
  }
}

/**
  * 获取编码后的值
  * @param key
  * @param data
  * @return
  * @throws Exception
  */
public static String decodeValue(String key,String data)
{
        byte[] datas;
        String value = null;
                try {

                         datas = decode(key, Base64.decode(data.getBytes()));

                        value = new String(datas);
                } catch (Exception e) {
                        value = "";
                }
        return value;
}

public static void main(String[] args) throws Exception
{
        System.out.println("明:abcd ;密:" + Main.encode("asdfwef5","abcd"));
}
}
PS:关于加密技术,本站还提供了如下加密工具供大家参考使用:
MD5在线加密工具:http://tools.jb51.net/password/CreateMD5Password
Escape加密/解密工具:http://tools.jb51.net/password/escapepwd
在线SHA1加密工具:http://tools.jb51.net/password/sha1encode
短链(短网址)在线生成工具:http://tools.jb51.net/password/dwzcreate
短链(短网址)在线还原工具:http://tools.jb51.net/password/unshorturl
高强度密码生成器:http://tools.jb51.net/password/CreateStrongPassword
            
            
您可能感兴趣的文章:
  • java易懂易用的MD5加密(可直接运行) (1)
  • java 易懂易用的MD5加密(可直接运行)(2)
  • java实现MD5加密算法的实例代码
  • des加密解密JAVA与.NET互通实例
  • java使用des加密解密示例分享
  • 使用java自带des加密算法实现文件加密和字符串加密
  • java实现md5加密示例
  • java常用工具类之DES和Base64加密解密类
  • 基于Java实现的Base64加密、解密原理代码
  • Apache Commons DbUtils工具包使用介绍
  • Java生成MD5加密字符串代码实例
  • 分享Java常用几种加密算法(四种)
  • java自带的MessageDigest实现文本的md5加密算法
  • Apache Commons fileUpload实现文件上传之一
  • Java实现MD5加密及解密的代码实例分享
  • java实现的AES加密算法完整实例
  • Apache Commons fileUpload文件上传多个示例分享
  • Apache commons fileupload文件上传实例讲解
  • java利用Apache commons codec进行MD5加密,BASE64加密解密,执行系统命令
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端