分类 Java 下的文章

在Java项目中,通常会使用一种基于分层架构的设计模式,将代码按照不同的职责划分到不同的包或模块中。在这种设计模式中,常见的包括DAO(数据访问对象)、Service(服务层)和Domain(领域模型)。

1、DAO(数据访问对象):DAO层负责与数据源(如数据库)进行交互,并提供对数据的持久化和访问操作。它封装了对数据的增删改查等数据库操作,提供了一种面向对象的方式来访问和操作数据,隐藏了底层数据库的细节。DAO层通常包含与数据源交互的接口和实现类,可以通过接口定义一组标准的数据访问方法,而具体的实现类则负责实现这些方法。

2、Service(服务层):Service层是业务逻辑的处理层,负责封装具体的业务逻辑,并协调不同的DAO操作来完成特定的任务。它作为DAO层和表示层(如控制器或界面)之间的中间层,提供一个统一的接口供表示层调用。Service层可以处理数据的验证、事务管理、权限控制等与业务相关的逻辑。

3、Domain(领域模型):Domain层代表了项目中的领域模型或实体对象,它是项目中的核心部分。领域模型通常对应于真实世界中的概念,如用户、订单、产品等,它们具有特定的属性和行为。Domain层通常包含与领域模型相关的类和接口,用于定义和表示领域模型的结构和行为。

这种分层架构的设计模式可以帮助提高代码的可维护性、可扩展性和可重用性,使不同的职责得到清晰的划分,并且各层之间通过接口进行解耦,降低了模块之间的依赖性。

PHP

<?php
ini_set("error_reporting","E_ALL & ~E_NOTICE");
header('Content-Type:application/json; charset=utf-8');
if (!function_exists('openssl_encrypt')){
    exit('请开启php.ini的openssl扩展');
}
$input="123456";   //要加密的字符串
$deskey='QDHPJKOS';//算法密钥 
$des = new Des();
$encode=$des->encrypt($input,$deskey);
echo "DES加密结果:".$encode;
$decode=$des->decrypt($encode,$deskey);
echo "\r\nDES解密结果:".$decode;

/**
 * DES加解密类
 */
class Des{
   
    /**
     *
     * 加密函数
     * 算法:des
     * 加密模式:ecb
     * 补齐方法:PKCS5
     *
     * @param unknown_type $input
     */
    public function encrypt($input, $key)
    {
        //由于php7.1废弃了mcrypt_* 一系列函数,所以采用openssl版本
        $str = $this->pkcsPadding($input, 8);
        $key = str_pad($key, 8, '0'); //3DES加密将8改为24
        $sign = @openssl_encrypt($str, 'DES-ECB', $key,OPENSSL_RAW_DATA | OPENSSL_NO_PADDING);
        //转为base64,可以有效解决乱码等问题
        $sign = base64_encode($sign);
        return $sign;
    }
    
    /**
     * 解密函数
     * 算法:des
     * 加密模式:ecb
     * 补齐方法:PKCS5
     * @param unknown_type $input
     */
    public function decrypt($input, $key)
    {
        //由于php7.1废弃了mcrypt_* 一系列函数 所以采用openssl版本
        $encrypted = base64_decode($input);
        $key = str_pad($key, 8, '0'); //3DES加密将8改为24
        $sign = @openssl_decrypt($encrypted, 'DES-ECB', $key,OPENSSL_RAW_DATA | OPENSSL_NO_PADDING);
        $sign = $this->unPkcsPadding($sign);
        $sign = rtrim($sign);
        return $sign;
    }
    /**
     * 填充
     *
     * @param $text
     * @param $blocksize
     * @return string
     */
    private function pkcsPadding($text, $blocksize)
    {
        $pad = $blocksize - (strlen($text) % $blocksize);
        return $text . str_repeat(chr($pad), $pad);
    }
 
     /**
     * 去填充
     * 
     * @param $text
     * @return string
     */
    private function unPkcsPadding($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);
    }
    
}

JAVA

package demoSys;

import java.security.SecureRandom;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String input = "123456";
        String deskey = "QDHPJKOS";
        String encode = encrypt(input, deskey);
        System.out.println("DES加密结果:" + encode);
        String decode = decrypt(encode, deskey);
        System.out.println("DES解密结果:" + decode);
    }

    public static String encrypt(String souce, String key) {
        try {
            // DES算法要求有一个可信任的随机数源
            SecureRandom sr = new SecureRandom();
            // 从原始密匙数据创建DESKeySpec对象
            DESKeySpec dks = new DESKeySpec(key.getBytes("UTF-8"));
            // 创建一个密匙工厂,然后用它把DESKeySpec转换成 一个SecretKey对象
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey secretkey = keyFactory.generateSecret(dks);
            // Cipher对象实际完成加密操作
            Cipher cipher = Cipher.getInstance("DES");
            // 用密匙初始化Cipher对象
            cipher.init(Cipher.ENCRYPT_MODE, secretkey, sr);
            // 获取数据并加密
            byte encryptedData[] = cipher.doFinal(souce.getBytes("UTF-8"));
            // JDK1.8及以上可直接使用Base64,JDK1.7及以下可以使用BASE64Encoder
            // Android平台可以使用android.util.Base64
            return new String(Base64.getEncoder().encode(encryptedData));
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            return souce;
        }

    }

    public static String decrypt(String souce, String key) {
        try {
            // DES算法要求有一个可信任的随机数源
            SecureRandom sr = new SecureRandom();
            // 从原始密匙数据创建DESKeySpec对象
            DESKeySpec dks = new DESKeySpec(key.getBytes());
            // 创建一个密匙工厂,然后用它把DESKeySpec转换成 一个SecretKey对象
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey secretkey = keyFactory.generateSecret(dks);
            // Cipher对象实际完成加密操作
            Cipher cipher = Cipher.getInstance("DES");
            // 用密匙初始化Cipher对象
            cipher.init(Cipher.DECRYPT_MODE, secretkey, sr);
            // 将加密报文用BASE64算法转化为字节数组
            byte[] encryptedData = Base64.getDecoder().decode(souce);
            // 用DES算法解密报文
            byte decryptedData[] = cipher.doFinal(encryptedData);
            return new String(decryptedData, "UTF-8");
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            return souce;
        }

    }

}