DES加密 java与.net可以相互加密解密的方法_痞帅爷们儿的博客-程序员秘密

我.net/Java程序员。今天让C#和Java数据加密交互。通过这个方法可以实现java和C#相互加密与解密 并能保持解密出来一致。

话不多说,看代码

C#代码如下

package web_test;

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


public class AESUtils {

    
    private byte[] desKey;

    //解密数据
    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);
        return new String(retByte);
    }

    public static byte[] encrypt(String message, String key)
            throws Exception {
        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);
        return cipher.doFinal(message.getBytes("UTF-8"));
    }

    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();
    }

}

 static void Main(string[] args)
        {
            string DES_Key = "12345678";
            Console.WriteLine("----------------------------------------------------------------------");

            localhost.testService ts = new localhost.testService();
            //接收java WebService服务loadname方法返回的值
            int c = ts.loadname(456);//ts.loadname(456)代表一个int类型的值,你可以写成 int c=123456;等等
            //接收java WebService服务loadname2方法返回的值
            string d = ts.loadname2();
           //处理java传过来的密文
            string jiamijava = AESHelper.DESEnCodeJava(d, DES_Key);

           //解密java处理的密文
            string jiemi = AESHelper.DESDeCode(jiamijava, DES_Key);

           //打印解密后的密文
            Console.WriteLine(jiemi);

            //加密C#数据
            string jiami = AESHelper.DESEnCode("我太难了,反倒是减肥广东省", DES_Key);
            //接收java WebService服务loadname4方法返回的值
            string cd = ts.loadname4(jiami);
            //处理java传过来的密文
            jiamijava = AESHelper.DESEnCodeJava(cd, DES_Key);

           //解密java处理的密文
            jiemi = AESHelper.DESDeCode(jiamijava, DES_Key);

            //打印解密后的密文
            Console.WriteLine(jiemi);
            //接收java WebService服务datime方法返回的值
            string c1 = ts.datime(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
            Console.WriteLine(ts.dble(623.23687));
            Console.WriteLine(c);
            //Console.WriteLine(d);
            Console.WriteLine(c1);
            Console.WriteLine(c + "===" + jiemi);

            //加密C#数据
            jiami = AESHelper.DESEnCode("", DES_Key);
            //接收java WebService服务str方法返回的值
            string str = ts.str(jiami);

            //处理java传过来的密文
            jiamijava = AESHelper.DESEnCodeJava(str, DES_Key);

            //解密java处理掉密文
            jiemi = AESHelper.DESDeCode(jiamijava, DES_Key);
            Console.WriteLine("================================================");
            Console.WriteLine(jiemi);
            Console.WriteLine("================================================");
            Console.Read();
        }

 

Java代码如下

package web_test;

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


public class AESUtils {


    private byte[] desKey;

    //解密数据
    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);
        return new String(retByte);
    }

    public static byte[] encrypt(String message, String key)
            throws Exception {
        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);
        return cipher.doFinal(message.getBytes("UTF-8"));
    }

    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();
    }

}

 

package web_test;

import org.apache.axis2.databinding.types.xsd.DateTime;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.crypto.Cipher;
import javax.xml.ws.BindingType;
import javax.xml.ws.soap.SOAPBinding;
import java.io.*;
import java.math.BigInteger;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.RSAPublicKeySpec;
import java.util.Scanner;

import static web_test.AESUtils.decrypt;
import static web_test.AESUtils.encrypt;
import static web_test.AESUtils.toHexString;


//@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
//@BindingType(SOAPBinding.SOAP11HTTP_BINDING)
//public class test implements java.io.Serializable {

public class test {

    //String key = "kkkkkkk123456789";//必须保持16位//
    String key = "12345678";


    public String loadname2() {
        String strBase64 = "";
        try {
            //加密
            //String value = "A:正月里是新年哪,呀子一子哟,正月里是新年,一嗨哟";
            String value = "{\"code\":0,\"msg\":null,\"count\":50,\"data\":[{\"ClearDate\":\"2019-02-13\",\"ClearInfo\":\"没有需要清除的数据 . 2019-02-13\",\"ClearUser\":\"系统自动\",\"RecordId\":206},{\"ClearDate\":\"2019-02-12\",\"ClearInfo\":\"共清除的数据 103 条,敏感信息全部赋值为 000000000. 2019-02-12\",\"ClearUser\":\"系统自动\",\"RecordId\":205},{\"ClearDate\":\"2019-02-11\",\"ClearInfo\":\"没有需要清除的数据 . 2019-02-11\",\"ClearUser\":\"系统自动\",\"RecordId\":204},{\"ClearDate\":\"2019-02-10\",\"ClearInfo\":\"共清除的数据 146 条,敏感信息全部赋值为 000000000. 2019-02-10\",\"ClearUser\":\"系统自动\",\"RecordId\":203},{\"ClearDate\":\"2019-02-09\",\"ClearInfo\":\"没有需要清除的数据 . 2019-02-09\",\"ClearUser\":\"系统自动\",\"RecordId\":202},{\"ClearDate\":\"2019-02-08\",\"ClearInfo\":\"没有需要清除的数据 . 2019-02-08\",\"ClearUser\":\"系统自动\",\"RecordId\":201},{\"ClearDate\":\"2019-02-07\",\"ClearInfo\":\"共清除的数据 53 条,敏感信息全部赋值为 000000000. 2019-02-07\",\"ClearUser\":\"系统自动\",\"RecordId\":200},{\"ClearDate\":\"2019-02-06\",\"ClearInfo\":\"共清除的数据 54 条,敏感信息全部赋值为 000000000. 2019-02-06\",\"ClearUser\":\"系统自动\",\"RecordId\":199},{\"ClearDate\":\"2019-02-05\",\"ClearInfo\":\"共清除的数据 50 条,敏感信息全部赋值为 000000000. 2019-02-05\",\"ClearUser\":\"系统自动\",\"RecordId\":198},{\"ClearDate\":\"2019-02-04\",\"ClearInfo\":\"共清除的数据 55 条,敏感信息全部赋值为 000000000. 2019-02-04\",\"ClearUser\":\"系统自动\",\"RecordId\":197},{\"ClearDate\":\"2019-02-03\",\"ClearInfo\":\"没有需要清除的数据 . 2019-02-03\",\"ClearUser\":\"系统自动\",\"RecordId\":196},{\"ClearDate\":\"2019-02-02\",\"ClearInfo\":\"共清除的数据 39 条,敏感信息全部赋值为 000000000. 2019-02-02\",\"ClearUser\":\"系统自动\",\"RecordId\":195},{\"ClearDate\":\"2019-02-01\",\"ClearInfo\":\"没有需要清除的数据 . 2019-02-01\",\"ClearUser\":\"系统自动\",\"RecordId\":194},{\"ClearDate\":\"2019-01-31\",\"ClearInfo\":\"没有需要清除的数据 . 2019-01-31\",\"ClearUser\":\"系统自动\",\"RecordId\":193},{\"ClearDate\":\"2019-01-30\",\"ClearInfo\":\"共清除的数据 52 条,敏感信息全部赋值为 000000000. 2019-01-30\",\"ClearUser\":\"系统自动\",\"RecordId\":192},{\"ClearDate\":\"2019-01-29\",\"ClearInfo\":\"共清除的数据 38 条,敏感信息全部赋值为 000000000. 2019-01-29\",\"ClearUser\":\"系统自动\",\"RecordId\":191},{\"ClearDate\":\"2019-01-28\",\"ClearInfo\":\"共清除的数据 67 条,敏感信息全部赋值为 000000000. 2019-01-28\",\"ClearUser\":\"系统自动\",\"RecordId\":190},{\"ClearDate\":\"2019-01-27\",\"ClearInfo\":\"共清除的数据 89 条,敏感信息全部赋值为 000000000. 2019-01-27\",\"ClearUser\":\"系统自动\",\"RecordId\":189},{\"ClearDate\":\"2019-01-26\",\"ClearInfo\":\"共清除的数据 131 条,敏感信息全部赋值为 000000000. 2019-01-26\",\"ClearUser\":\"系统自动\",\"RecordId\":188},{\"ClearDate\":\"2019-01-25\",\"ClearInfo\":\"没有需要清除的数据 . 2019-01-25\",\"ClearUser\":\"系统自动\",\"RecordId\":187},{\"ClearDate\":\"2019-01-24\",\"ClearInfo\":\"没有需要清除的数据 . 2019-01-24\",\"ClearUser\":\"系统自动\",\"RecordId\":186},{\"ClearDate\":\"2019-01-23\",\"ClearInfo\":\"共清除的数据 79 条,敏感信息全部赋值为 000000000. 2019-01-23\",\"ClearUser\":\"系统自动\",\"RecordId\":185},{\"ClearDate\":\"2019-01-22\",\"ClearInfo\":\"共清除的数据 84 条,敏感信息全部赋值为 000000000. 2019-01-22\",\"ClearUser\":\"系统自动\",\"RecordId\":184},{\"ClearDate\":\"2019-01-21\",\"ClearInfo\":\"共清除的数据 153 条,敏感信息全部赋值为 000000000. 2019-01-21\",\"ClearUser\":\"系统自动\",\"RecordId\":183},{\"ClearDate\":\"2019-01-20\",\"ClearInfo\":\"没有需要清除的数据 . 2019-01-20\",\"ClearUser\":\"系统自动\",\"RecordId\":182},{\"ClearDate\":\"2019-01-19\",\"ClearInfo\":\"没有需要清除的数据 . 2019-01-19\",\"ClearUser\":\"系统自动\",\"RecordId\":181},{\"ClearDate\":\"2019-01-18\",\"ClearInfo\":\"没有需要清除的数据 . 2019-01-18\",\"ClearUser\":\"系统自动\",\"RecordId\":180},{\"ClearDate\":\"2019-01-17\",\"ClearInfo\":\"没有需要清除的数据 . 2019-01-17\",\"ClearUser\":\"系统自动\",\"RecordId\":179},{\"ClearDate\":\"2019-01-16\",\"ClearInfo\":\"共清除的数据 84 条,敏感信息全部赋值为 000000000. 2019-01-16\",\"ClearUser\":\"系统自动\",\"RecordId\":178},{\"ClearDate\":\"2019-01-15\",\"ClearInfo\":\"共清除的数据 85 条,敏感信息全部赋值为 000000000. 2019-01-15\",\"ClearUser\":\"系统自动\",\"RecordId\":177},{\"ClearDate\":\"2019-01-14\",\"ClearInfo\":\"共清除的数据 70 条,敏感信息全部赋值为 000000000. 2019-01-14\",\"ClearUser\":\"系统自动\",\"RecordId\":176},{\"ClearDate\":\"2019-01-13\",\"ClearInfo\":\"共清除的数据 72 条,敏感信息全部赋值为 000000000. 2019-01-13\",\"ClearUser\":\"系统自动\",\"RecordId\":175},{\"ClearDate\":\"2019-01-12\",\"ClearInfo\":\"共清除的数据 111 条,敏感信息全部赋值为 000000000. 2019-01-12\",\"ClearUser\":\"系统自动\",\"RecordId\":174},{\"ClearDate\":\"2019-01-11\",\"ClearInfo\":\"没有需要清除的数据 . 2019-01-11\",\"ClearUser\":\"系统自动\",\"RecordId\":173},{\"ClearDate\":\"2019-01-10\",\"ClearInfo\":\"没有需要清除的数据 . 2019-01-10\",\"ClearUser\":\"系统自动\",\"RecordId\":172},{\"ClearDate\":\"2019-01-09\",\"ClearInfo\":\"共清除的数据 76 条,敏感信息全部赋值为 000000000. 2019-01-09\",\"ClearUser\":\"系统自动\",\"RecordId\":171},{\"ClearDate\":\"2019-01-08\",\"ClearInfo\":\"共清除的数据 69 条,敏感信息全部赋值为 000000000. 2019-01-08\",\"ClearUser\":\"系统自动\",\"RecordId\":170},{\"ClearDate\":\"2019-01-07\",\"ClearInfo\":\"共清除的数据 54 条,敏感信息全部赋值为 000000000. 2019-01-07\",\"ClearUser\":\"系统自动\",\"RecordId\":169},{\"ClearDate\":\"2019-01-06\",\"ClearInfo\":\"共清除的数据 45 条,敏感信息全部赋值为 000000000. 2019-01-06\",\"ClearUser\":\"系统自动\",\"RecordId\":168},{\"ClearDate\":\"2019-01-05\",\"ClearInfo\":\"共清除的数据 81 条,敏感信息全部赋值为 000000000. 2019-01-05\",\"ClearUser\":\"系统自动\",\"RecordId\":167},{\"ClearDate\":\"2019-01-04\",\"ClearInfo\":\"没有需要清除的数据 . 2019-01-04\",\"ClearUser\":\"系统自动\",\"RecordId\":166},{\"ClearDate\":\"2019-01-03\",\"ClearInfo\":\"没有需要清除的数据 . 2019-01-03\",\"ClearUser\":\"系统自动\",\"RecordId\":165},{\"ClearDate\":\"2019-01-02\",\"ClearInfo\":\"共清除的数据 29 条,敏感信息全部赋值为 000000000. 2019-01-02\",\"ClearUser\":\"系统自动\",\"RecordId\":164},{\"ClearDate\":\"2019-01-01\",\"ClearInfo\":\"共清除的数据 29 条,敏感信息全部赋值为 000000000. 2019-01-01\",\"ClearUser\":\"系统自动\",\"RecordId\":163},{\"ClearDate\":\"2018-12-31\",\"ClearInfo\":\"共清除的数据 66 条,敏感信息全部赋值为 000000000. 2018-12-31\",\"ClearUser\":\"系统自动\",\"RecordId\":162},{\"ClearDate\":\"2018-12-30\",\"ClearInfo\":\"共清除的数据 59 条,敏感信息全部赋值为 000000000. 2018-12-30\",\"ClearUser\":\"系统自动\",\"RecordId\":161},{\"ClearDate\":\"2018-12-29\",\"ClearInfo\":\"共清除的数据 75 条,敏感信息全部赋值为 000000000. 2018-12-29\",\"ClearUser\":\"系统自动\",\"RecordId\":160},{\"ClearDate\":\"2018-12-28\",\"ClearInfo\":\"没有需要清除的数据 . 2018-12-28\",\"ClearUser\":\"系统自动\",\"RecordId\":159},{\"ClearDate\":\"2018-12-27\",\"ClearInfo\":\"没有需要清除的数据 . 2018-12-27\",\"ClearUser\":\"系统自动\",\"RecordId\":158},{\"ClearDate\":\"2018-12-26\",\"ClearInfo\":\"共清除的数据 68 条,敏感信息全部赋值为 000000000. 2018-12-26\",\"ClearUser\":\"系统自动\",\"RecordId\":157}]}";
            strBase64 = java.net.URLEncoder.encode(value, "utf-8").toLowerCase();
            //打印加密后的字符串
            System.out.println(strBase64);
        } catch (Exception ex) {
            System.out.println(ex.toString());
        }
        //返回加密后的字符串
        return strBase64;
    }

    public int loadname(int str) {
        return str;
    }

    public String loadname4(String str) {
        String strBase64 = "";
        String jiami = "";
        try {
            //解密传过来的字符密文str
            String b = java.net.URLDecoder.decode(decrypt(str, key), "utf-8");

            //拼接解密后的字符串
            strBase64 = "当前键入的字符串:" + b;
            //加密拼接后的字符串
            jiami = java.net.URLEncoder.encode(strBase64, "utf-8").toLowerCase();
            //打印加密后的字符串
            System.out.println(strBase64);

        } catch (Exception ex) {
            System.out.println(ex.toString());
        }
        return jiami;
    }

    public String datime(String dtime) {
        return "当前时间:" + dtime;
    }

    public double dble(double d) {
        return d;
    }

    public String str(String value) throws Exception {
        //解密传过来的字符密文
        String b = java.net.URLDecoder.decode(decrypt(value, key), "utf-8");

        //加密解密后的字符串
        String jiami = java.net.URLEncoder.encode(b, "utf-8").toLowerCase();
        return jiami;
    }
}

 

也可参照另外一个做些写的:https://www.cnblogs.com/sexintercourse/p/6063387.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34576513/article/details/102800555

智能推荐

数论-GCD、LCM、扩展欧几里得_吾仄lo咚锵的博客-程序员秘密

HDU-5523HDU-1576扩展欧几里得问题引入:ax+by=nax+by=n什么时候有整数解?有解的充要条件是gcd(a,b)gcd(a,b)可以整除nn,当方程符合ax+by=gcd(a,b)ax+by=gcd(a,b)时,可以用扩展欧几里得算法求一个整数解(x_0,y_0),程序如下:

标签平滑和样本类别不均衡处理方式_labelsmooth样本不均衡_望长安于日下的博客-程序员秘密

文章目录1. 论文1.1 Label Smoothing1.2 Focal Loss2. 代码实现2.1 Label Smoothing loss function2.2 labels mooth+类别不均衡loss1. 论文1.1 Label Smoothinghttps://arxiv.org/abs/1906.02629 When Does Label Smoothing Help?https://arxiv.org/abs/1701.06548 Regularizing Neural Ne

Linux里面Bash的使用方法_bash命令用法_zhuizong8的博客-程序员秘密

[email protected]是一个程序,可以称之为壳程序,用于用户与操作系统进行交互。用来区别与核,相当于是一个命令解析器,Shell有很多中,这里列出其中几种Bourne SHell(sh)Bourne Again SHell(bash)C SHell(csh)KornSHell(ksh)zsh各个shell的功能都差不太多,在某些语法的下达下面有些区别,Linux预设就是bash。这里主要介绍bashbashbash命令是sh命令的超集,大多数sh脚本

access和dbc区别_求教汽车DBC和A2L文件的区别?_weixin_39543835的博客-程序员秘密

A2L文件是由ASAM MCD-2 MC标准定义的用于测量和标定目的的内部ECU变量的描述格式。标定指在调整ECU的功能相关的参数(标量,曲线和脉谱)以实现和优化相关的系统性能。标定工作一般由标定工程师手动完成,或者由特定的应用程序来执行,例如自动化标定系统(例如AVL CAMEO软件)。标定时需要对ECU进行写访问以设置新值或读访问以获取当前值。通常通过MEASUREMENT指令访问其他ECU变...

线段树扫描线(感觉不错就转载了..)_crazy__C的博客-程序员秘密

线段树辅助——扫描线法计算矩形面积并分析:1.矩形比较多,坐标也很大,所以横坐标需要离散化(纵坐标不需要),熟悉离散化后这个步骤不难,所以这里不详细讲解了,不明白的还请百度2.重点:扫描线法:假想有一条扫描线,从左往右(从右往左),或者从下往上(从上往下)扫描过整个多边形(或者说畸形。。多个矩形叠加后的那个图形)。如果是竖直方向上扫描,则是离散化横坐标,如果

自编码器(AE)原理解析_ae 自动编码器_Steven·简谈的博客-程序员秘密

机器学习基本分为监督学习、无监督学习、强化学习,而自编码器则是无监督学习的一种,不过它比较自觉,别人不监督它但它自己监督自己,对输入样本 xxx 进行训练,得出结果后再与 xxx 进行对比。通过这一特性,自编码器可以随机生成与训练数据类似的数据,比如对图片进行重建。AE的结构无监督学习的数据没有额外的标注信息,只有数据 xxx 本身。利用数据 xxx 本身作为监督信号来指导网络的训练,即希望神经网络能够学习到映射 fθ:x→xf_{\theta}:x\to xfθ​:x→x。我们把网络 fθf_

随便推点

NIO编程中,socket服务端重启后,客户端报java.nio.channels.ClosedChannelException_Janson_LBJ的博客-程序员秘密

这个问题是客户端和服务器的管道关闭了。导致这个问题的原因是服务端程序重启或者关闭重开导致的。解决这个问题的方法是在捕获异常的时候,对报错位置进行try-catch。如果报错,先把原来的网络管道socketchannel关闭,重新创建管道并连接服务端,注意不是创建客户端对象而是管道代码如下:...

c++强大背后(转自qiangtiantian的笔记)_小小IT的博客-程序员秘密

在31年前(1979年),一名刚获得博士学位的研究员,为了开发一个软件项目发明了一门新编程语言,该研究员名为Bjarne Stroustrup,该门语言则命名为——C with classes,四年后改称为C++。C++是一门通用编程语言,支持多种编程范式,包括过程式、面向对象(object-oriented programming, OP)、泛型(generic programming, G

最长公共子序列问题_最长公共子序列问题递推_小宋想站起来的博客-程序员秘密

确定递推关系式if(s[i] == t[j]) dp[i+1][j+1] = dp[i][j]+1;如果s[i] == t[j],以s[i],t[j]结尾的最长公共子序列等于dp[i][j]+1;else dp[i+1][j+1] = max(dp[i][j+1], dp[i+1][j]);如果不等,有两种可能,一种是以s[i],t[j-1]结尾对应的长度较长,或者是以s[i-1]...

基于Python的人脸识别和对比_python 人脸相似_奕话的博客-程序员秘密

github 地址https://github.com/yharvey956/socket_face_recognition使用Face Recognition人脸识别库检测识别对比人脸。测试环境 Python 3.6.4 Windows 10 Anaconda 4.5.12 Dlib 19.16.0 Face_Recognition 1.2.3 ...

键盘控制_weixin_34262482的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

推荐文章

热门文章

相关标签