我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java和PHP 的非对称加密RSA/ECB/PKCS1Padding和对称加密DESede/ECB/PKCS5Padding;

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java和PHP 的非对称加密RSA/ECB/PKCS1Padding和对称加密DESede/ECB/PKCS5Padding;

非对称加解密PHP

            public function EnRsa($str,$public_key){        //公钥加密        $public_key = chunk_split($public_key , 64, "\n");        $public_key = "-----BEGIN PUBLIC KEY-----\n$public_key-----END PUBLIC KEY-----\n";        $key = openssl_pkey_get_public($public_key);        if (!$key) {            return('公钥不可用');        }        $result='';        $data = str_split($str, 117);        foreach ($data as $block) {            openssl_public_encrypt($block, $dataEncrypt, $public_key, OPENSSL_PKCS1_PADDING);            $result .= $dataEncrypt;        }        return  $result ? base64_encode($result) : null;    }        public function DeRsa($str,$private_key){        $private_key = chunk_split($private_key , 64, "\n");        $private_key = "-----BEGIN PRIVATE KEY-----\n".wordwrap($private_key)."-----END PRIVATE KEY-----";        $private_key = openssl_pkey_get_private($private_key);        if (!$private_key) {            return('私钥不可用');        }        $crypto = '';        foreach (str_split(base64_decode($str), 128) as $chunk) {            openssl_private_decrypt($chunk, $decryptData, $private_key, OPENSSL_PKCS1_PADDING);            $crypto .= $decryptData;        }        return $crypto;    }

对称加解密PHP

     * @desc 对称加密     *     * @param $str     * @return string     * @author Tao     * @email  804633234@qq.com     * @date 2022-08-13 11:16     */    public function EnRsaEcb($str){        return base64_encode(openssl_encrypt($str, 'DES-EDE3', $this->DESede, OPENSSL_RAW_DATA));    }        public function DeRsaEcb($str,$key){        $decrypted = openssl_decrypt(base64_decode($str), 'DES-EDE3',$key, OPENSSL_RAW_DATA);        return $decrypted;    }

JAVA

import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import com.hitrust.tech.util.Base64;import java.io.FileInputStream;import java.security.*;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import java.util.Enumeration;import java.util.HashMap;class Main {    public static String data="hello world";    public static String publicKeyString="";    public static String privateKeyString="";    public static void main(String[] args) {        //对称加密        try {            encryptDES("123","abcdefghizklmnopqrstuvwx");        } catch (Exception e) {            e.printStackTrace();        }        //对称解密        try {            decryptDES("qBSsv4QW65A=","abcdefghizklmnopqrstuvwx");        } catch (Exception e) {            e.printStackTrace();        }        //获取公钥        PublicKey publicKey= null;        try {            publicKey = getPublicKey(publicKeyString);        } catch (Exception e) {            e.printStackTrace();        }        //获取私钥        PrivateKey privateKey= null;        try {            privateKey = getPrivateKey(privateKeyString);        } catch (Exception e) {            e.printStackTrace();        }        //公钥加密        byte[] encryptedBytes= new byte[0];        try {            encryptedBytes = encrypt(data.getBytes(), publicKey);        } catch (Exception e) {            e.printStackTrace();        }        System.out.println("加密后:"+new String(encryptedBytes));        //私钥解密        String keyStorefile = "C:\\Users\\Administrator\\Desktop\\siyao.pfx";        String keyPassword = "000000";        byte[] decryptedBytes= new byte[0];        try {            String str="";            decryptedBytes = decrypt(str, getPvkformPfx(keyStorefile,keyPassword));        } catch (Exception e) {            e.printStackTrace();        }        System.out.println("解密后:"+Base64.encode(decryptedBytes));    }        public static void generateKey() throws Exception {        //实例化密钥生成器        KeyGenerator kg = KeyGenerator.getInstance("DESede");        //DESede 要求密钥长度为 112位或168位        kg.init(168);        //生成密钥        SecretKey secretKey = kg.generateKey();        //获得密钥的字符串形式        System.out.println(new String(Base64.encode(secretKey.getEncoded())));    }    //dui    public static void encryptDES(String paramString1, String key)            throws Exception    {        byte[] keybyte = key.getBytes("utf-8");        SecretKey deskey = new SecretKeySpec(keybyte, "DESede");        byte[] input = paramString1.getBytes("UTF-8");        Cipher c1 = Cipher.getInstance("DESede/ECB/PKCS5Padding");        c1.init(Cipher.ENCRYPT_MODE, deskey);        byte[] str1 = c1.doFinal(input);        String str =Base64.encode(str1);        System.out.println("jiamishuju:");        System.out.println(str);    }    public static void decryptDES(String paramString1, String key)            throws Exception    {        byte[] keybyte = key.getBytes("utf-8");        SecretKey deskey2 = new SecretKeySpec(keybyte, "DESede");        Cipher c2 = Cipher.getInstance("DESede");        c2.init(Cipher.DECRYPT_MODE, deskey2);//加载解密算法        byte[] str2 = c2.doFinal(Base64.decode(paramString1));//获得解密后的数据        String string = new String(str2, "utf-8");        System.out.println("jiemishuju:");        System.out.println(string);    }    public static void decryptDES_(String paramString1, byte[] key)            throws Exception    {        byte[] keybyte = key;        SecretKey deskey2 = new SecretKeySpec(keybyte, "DESede");        Cipher c2 = Cipher.getInstance("DESede");        c2.init(Cipher.DECRYPT_MODE, deskey2);//加载解密算法        byte[] str2 = c2.doFinal(Base64.decode(paramString1));//获得解密后的数据        String string = new String(str2, "utf-8");        System.out.println("jiemishuju:");        System.out.println(string);    }    //将base64编码后的公钥字符串转成PublicKey实例    public static PublicKey getPublicKey(String publicKey) throws Exception{        byte[ ] keyBytes=publicKey.getBytes("utf-8");        X509EncodedKeySpec keySpec=new X509EncodedKeySpec(keyBytes);        KeyFactory keyFactory=KeyFactory.getInstance("RSA");        return keyFactory.generatePublic(keySpec);    }    //将base64编码后的私钥字符串转成PrivateKey实例    public static PrivateKey getPrivateKey(String privateKey) throws Exception{        byte[ ] keyBytes=privateKey.getBytes("utf-8");//Base64.getDecoder().decode(privateKey.getBytes());        PKCS8EncodedKeySpec keySpec=new PKCS8EncodedKeySpec(keyBytes);        KeyFactory keyFactory=KeyFactory.getInstance("RSA");        return keyFactory.generatePrivate(keySpec);    }    //公钥加密    public static byte[] encrypt(byte[] content, PublicKey publicKey) throws Exception{        Cipher cipher=Cipher.getInstance("RSA");//java默认"RSA"="RSA/ECB/PKCS1Padding"        cipher.init(Cipher.ENCRYPT_MODE, publicKey);        return cipher.doFinal(content);    }    //私钥解密    public static byte[] decrypt(String str, PrivateKey privateKey) throws Exception{        byte[] content=Base64.decode(str);        Cipher cipher=Cipher.getInstance("RSA");        cipher.init(Cipher.DECRYPT_MODE, privateKey);        return cipher.doFinal(content);    }        private  static PrivateKey getPvkformPfx(String strPfx, String strPassword){        try {            FileInputStream fis = new FileInputStream(strPfx);            //密码处理            char[] nPassword = null;            if ((strPassword == null) || strPassword.trim().equals("")){                nPassword = null;            } else {                nPassword = strPassword.toCharArray();            }            //加载读取PFX文件            KeyStore ks = KeyStore.getInstance("PKCS12");            ks.load(fis, nPassword);            fis.close();            Enumeration enumas = ks.aliases();            //从文件中获取秘钥            String keyPFXFile = null;            if (enumas.hasMoreElements()) {                keyPFXFile = (String)enumas.nextElement();            }            PrivateKey prikey = (PrivateKey) ks.getKey(keyPFXFile, nPassword);//            Certificate cert = (Certificate) ks.getCertificate(keyPFXFile);//            PublicKey pubkey = cert.getPublicKey();//            System.out.println("cert class = " + cert.getClass().getName());//            System.out.println("cert = " + cert);//            System.out.println("public key = " + pubkey);//            System.out.println("private key = " + prikey);//            System.out.println("private encode = " + Base64.encode(prikey.getEncoded()));            return prikey;        } catch (Exception e) {            e.printStackTrace();        }        return null;    }}

XML

        public  function Sign($str){        $bufSignclass="lazy" data-src =$str;        $private_key = chunk_split($this->private_key , 64, "\n");        $key = "-----BEGIN PRIVATE KEY-----\n".wordwrap($private_key)."-----END PRIVATE KEY-----";        if(openssl_sign($bufSignclass="lazy" data-src, $signature, $key )){            //echo "success";        }else{            //echo 'sign fail';        }        $sign = base64_encode($signature);        return $sign;    }       public function enxml($header, $body)    {        $headerxml = "";        foreach ($header as $key => $val) {            $headerxml .= "<$key>$val";        }        $bodyxml = "";        foreach ($body as $key => $val) {            $bodyxml .= "<$key>$val";        }        $xml = '' . $headerxml . '' . $bodyxml . '';        return $xml;    }        public function dexml($xml)    {        try {            return json_decode(json_encode(simplexml_load_string($xml)), true);        } catch (\Throwable $exception) {            return [];        }    }

来源地址:https://blog.csdn.net/zhang804633234/article/details/126322165

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

java和PHP 的非对称加密RSA/ECB/PKCS1Padding和对称加密DESede/ECB/PKCS5Padding;

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java对称加密和非对称加密有什么区别

对称加密和非对称加密是两种常见的加密算法,它们在加密和解密的过程中有以下区别:1. 密钥的数量:对称加密使用同一个密钥来进行加密和解密,而非对称加密使用一对密钥,即公钥和私钥。2. 密钥的分发:对称加密的密钥需要在加密和解密的双方之间进行传
2023-09-05

php对称加密和解密的实现详解

PHP对称加密和解密实现详解本指南详细讲解了PHP中使用对称密钥进行加密和解密的实现方法。对称加密利用同一密钥加密和解密数据,PHP提供了多种函数来实现此功能。加密过程包括创建密钥、初始化加密器并加密明文,而解密过程则涉及创建解密器并解密密文。PHP支持多种对称加密算法,包括AES、DES和RC4。在使用对称加密时,安全考虑至关重要,包括密钥管理、算法选择和密钥长度。通过遵循最佳实践,开发人员可以确保数据的安全性和机密性。
php对称加密和解密的实现详解
2024-04-02

java项目中的非对称加密怎么利用RSA方式实现

java项目中的非对称加密怎么利用RSA方式实现?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java 中RSA的方式实现非对称加密的实例RSA通俗理解:你只要
2023-05-31

Java实现对称加密DES和AES的示例代码

这篇文章主要介绍了如何使用Java实现采用对称密码算法的应用软件,所用算法包括DES算法和AES算法,文中的示例代码讲解详细,感兴趣的可以了解一下
2023-05-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录