php des和 java des

package com.smh.action.wxweb;


import java.io.UnsupportedEncodingException;
import java.security.SecureRandom;


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


import org.apache.commons.codec.binary.Base64;


import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;




public class Des {

public static void main(String[] args) throws Exception {
    String key = "abcd1324";
    String value = "浮1云2村:夺%三:肋且&脸jul ";//浮1云2村:夺%三:肋且&脸Jul脸ew脸。扔//剑胆琴心 且脸脸炒顶替顶替且剑胆琴心擤受制于人烛脸擤 入秘要
    System.out.println("加密内容:"+value);
    System.out.println("密钥:"+key);
//     System.out.println(encryptBASE64("浮云村村"));
   
    String a=encrypt(value, key).toUpperCase();


    System.out.println("加密后的数据为:"+a);
    //c# 密码
    String ckey="262AF5ED25DCCA09BB2D9B20AB50A34A6540533145D33B0C61A2A7325218525E3D1F1418BE4697BE655E9690A523A6888755E62244417F150C1608D6C4B9F0DF25C8AA73759BC361291C43491E40BD03D8DD3777D5EB745BB99598FCFBA690575F06A42EB2B6EA32254185A771006E32E2D15" +
    "2122028CF8517248D487E489A9734FD7F6CA04B4D54";
    if (a.equals(ckey)) {
System.out.println("与C#相同 ok");
}else {
System.out.println("与C#不同 err");
}
    //String aa = "399A01EFFDCBF95DB8CEB846F7B8E48869248979D49D10D670E5C0B5449D463CE992A9130CA882ECC0A58A37D84A31A728E6D038C4A91EA8929CBC128DEBAAFED3257FBA52E9DCACE1A9E851F3D0C4FBBF5394F6985EC9CA271C976AFCDB930F3A88155C09C0735007BE9B7409F4712884DB4BC1B2AF63ECDFBBB579FDD4D42539E6CE2A394498D16BD2F4EB391395370E47B06F6305BA43D4972BD8853B176A88486F93436C9B0781CA993D0FC5C06677E49EF9E97AE767DA26C5F3487FCBC4B4B788E68D71DB056AAE8D85DC75C3C3DAA48A4C6DA0674ACA4CDEF8A105C259ABE78CD19FDDED06B763102116EFFF1C";
    //String b=java.net.URLDecoder.decode(decrypt(aa,key), "utf-8") ;
    String b = decrypt(a,key);
    if (b.equals(value)) {


        System.out.println("===========加密成功==============="); 
}else {


    System.out.println("============加密失败===================="); 
}
    System.out.println("解密后的数据:"+b); 


    }


/**
* DES加密
* @parameter message:需要加密的消息
* @parameter key:秘钥
* @return   加密后的字符串
*/
public static String encrypt(String message, String key)
throws Exception {
//对字符串进行URL编码
String jiami=java.net.URLEncoder.encode(message, "utf-8").toLowerCase();//url编码转为 小写
jiami=encryptBASE64(jiami);//base64编码 的字符串
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
byte[] bs=cipher.doFinal(jiami.getBytes("UTF-8"));//经过des加密后的字节数组
return toHexString(bs);// 经过des加密后的字节数组 每个字节转换为16进制
}
/**
* DES解密
* @parameter message:需要解密的消息
* @parameter key:秘钥
* @return   解密后的字符串
*/
public static String decrypt(String message,String key) throws Exception {
byte[] bytesrc =convertHexString(message); //把字符串转为 字节数组
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
byte[] retByte = cipher.doFinal(bytesrc);//得到des解密的字节数组
String ret = new String(retByte,"UTF-8"); //把des解密的字节数组转为string
//先以base64进行解密,然后用URL进行解码
ret = java.net.URLDecoder.decode(decryptBASE64(ret).toLowerCase(),"utf-8");
return ret;
}




public static byte[] convertHexString(String ss)
{
byte digest[] = new byte[ss.length() / 2];
for(int i = 0; i < digest.length; i++)
{
String byteString = ss.substring(2 * i, 2 * i + 2);
int byteValue = Integer.parseInt(byteString, 16);
digest[i] = (byte)byteValue;
}
return digest;
}

    public static String toHexString(byte b[]) {
    StringBuffer hexString = new StringBuffer();
    for (int i = 0; i < b.length; i++) {
    String plainText = Integer.toHexString(0xff & b[i]);
    if (plainText.length() < 2)
    plainText = "0" + plainText;
    hexString.append(plainText);
    }
    return hexString.toString();
    } 
/**
* 以base64对字符串加密
* @param s
* @return
*/
public static String encryptBASE64(String s) {
String ret = "";
byte[] b=s.getBytes();
try {
ret = new String(Base64.encodeBase64(b), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return ret;
}
/**
* 以base64对字符串解密
* @param s
* @return
*/
public static String  decryptBASE64(String s) {
byte[] ret = {};
try {
ret = Base64.decodeBase64(s.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
return  new String(ret,"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return "";
}
}
    






}



php:


class DES_JAVA{
    var $key;
    var $iv; //偏移量
      
    function DES_NET( $key, $iv=0 ) {
    //key长度8例如:1234abcd
        $this->key = $key;
        if( $iv == 0 ) {
            $this->iv = $key; //默认以$key 作为 iv
        } else {
            $this->iv = $iv; //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM );
        }
    }
      
    function encrypt($str) {
    //加密,返回大写十六进制字符串
//$str =strtolower(urlencode($str));
$str =urlencode($str);
$str=base64_encode($str);
        $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );
        $str = $this->pkcs5Pad ( $str, $size );
        return strtoupper( bin2hex( mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv ) ) );
    }
      
    function decrypt($str) {
    //解密
        //$strBin = $this->hex2bin( strtolower( $str ) );
        $strBin = $this->hex2bin($str);
        $str = mcrypt_cbc( MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv );
        $str = $this->pkcs5Unpad( $str );
//$str=strtolower(base64_decode($str));
$str=base64_decode($str);
        return urldecode($str);
    }
      
    function hex2bin($hexData) {
        $binData = "";
        for($i = 0; $i < strlen ( $hexData ); $i += 2) {
            $binData .= chr ( hexdec ( substr ( $hexData, $i, 2 ) ) );
        }
        return $binData;
    }
  
    function pkcs5Pad($text, $blocksize) {
        $pad = $blocksize - (strlen ( $text ) % $blocksize);
        return $text . str_repeat ( chr ( $pad ), $pad );
    }
      
    function pkcs5Unpad($text) {
        $pad = ord ( $text {strlen ( $text ) - 1} );
        if ($pad > strlen ( $text ))
            return false;
        if (strspn ( $text, chr ( $pad ), strlen ( $text ) - $pad ) != $pad)
            return false;
        return substr ( $text, 0, - 1 * $pad );
    }
      
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值