求大神指教AES加密和摘要

文档中是这么说的:

4.2.2 请求时加密
当拿到请求时的待加密的数据集后,需要使用密钥利用 AES 加密函数对这个 JSON 格式的数据集进行加密运算,
从而得到加密结果字符串(该字符串转换成 byte 数组赋值于请求 body 中)。
5 摘要机制
5.1 目的
数据摘要的主要目的是为了防止数据在传输过程中进行恶意篡改
5.2 MD5 签名
5.2.1 请求时签名
当拿到待签名的 AES 加密后的数据集数据后, 利用 MD5 加密函数对这个密文进行签名运算,从而得到 32 位签名
结果字符串(该字符串赋值于参数 d)。

我用C#进行AES加密后,不管是对AES加密结果的Byte[]数组进行MD5,还是对Byte[]转成16进制字符串进行MD5都提示数据被篡改。

Httpwebrequest中我直接用的AES加密后的Byte[]数组。

1个回答

你的密钥跟服务器的是否一致,然后文档说要以JSON格式再加密,你是否为JSON格式数据

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

Android AES加密后无法解密 求大神指导

package com.example.aes; import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; /** * AES加密解密算法 */ public class AESHelper { /** 算法/模式/填充 **/ private static final String CipherMode = "AES/CBC/PKCS5Padding"; /** 创建密钥 **/ private static SecretKeySpec createKey(String key) { byte[] data = null; if (key == null) { key = ""; } StringBuffer sb = new StringBuffer(16); sb.append(key); while (sb.length() < 16) { sb.append("0"); } if (sb.length() > 16) { sb.setLength(16); } try { data = sb.toString().getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return new SecretKeySpec(data, "AES"); } private static IvParameterSpec createIV(String password) { byte[] data = null; if (password == null) { password = ""; } StringBuffer sb = new StringBuffer(16); sb.append(password); while (sb.length() < 16) { sb.append("0"); } if (sb.length() > 16) { sb.setLength(16); } try { data = sb.toString().getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return new IvParameterSpec(data); } /** 加密字节数据 **/ public static byte[] encrypt(byte[] content, String password, String iv) { try { SecretKeySpec key = createKey(password); Cipher cipher = Cipher.getInstance(CipherMode); cipher.init(Cipher.ENCRYPT_MODE, key, createIV(iv)); byte[] result = cipher.doFinal(content); return result; } catch (Exception e) { e.printStackTrace(); } return null; } /** 加密(结果为16进制字符串) **/ public static String encrypt(String content, String password, String iv) { byte[] data = null; try { data = content.getBytes("UTF-8"); } catch (Exception e) { e.printStackTrace(); } data = encrypt(data, password, iv); String result = byte2hex(data); return result; } /** 解密字节数组 **/ public static byte[] decrypt(byte[] content, String password, String iv) { try { SecretKeySpec key = createKey(password); Cipher cipher = Cipher.getInstance(CipherMode); cipher.init(Cipher.DECRYPT_MODE, key, createIV(iv)); byte[] result = cipher.doFinal(content); return result; } catch (Exception e) { e.printStackTrace(); } return null; } /** 解密(输出结果为字符串) **/ public static String decrypt(String content, String password, String iv) { byte[] data = null; try { data = hex2byte(content); } catch (Exception e) { e.printStackTrace(); } data = decrypt(data, password, iv); if (data == null) return null; String result = null; try { result = new String(data, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return result; } /** 字节数组转成16进制字符串 **/ public static String byte2hex(byte[] b) { // 一个字节的数, StringBuffer sb = new StringBuffer(b.length * 2); String tmp = ""; for (int n = 0; n < b.length; n++) { // 整数转成十六进制表示 tmp = (java.lang.Integer.toHexString(b[n] & 0XFF)); if (tmp.length() == 1) { sb.append("0"); } sb.append(tmp); } return sb.toString().toUpperCase(); // 转成大写 } /** 将hex字符串转换成字节数组 **/ private static byte[] hex2byte(String inputString) { if (inputString == null || inputString.length() < 2) { return new byte[0]; } inputString = inputString.toLowerCase(); int l = inputString.length() / 2; byte[] result = new byte[l]; for (int i = 0; i < l; ++i) { String tmp = inputString.substring(2 * i, 2 * i + 2); result[i] = (byte) (Integer.parseInt(tmp, 16) & 0xFF); } return result; } } ------------------------------------------------------------ public class MainActivity extends Activity implements OnClickListener { private Button mJiami, mJiemi; private EditText mName; private String KEY="fe8f95cb0f968676572ab9f46d8a261b"; private String IV ="0F968676572AB9F4"; private String name; String aes; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initView(); } private void initView() { mName = (EditText) findViewById(R.id.editText1); name = mName.getText().toString().trim(); mJiami = (Button) findViewById(R.id.button1); mJiemi = (Button) findViewById(R.id.button2); mJiami.setOnClickListener(this); mJiemi.setOnClickListener(this); } @Override public void onClick(View v) { String help = null; switch (v.getId()) { case R.id.button1: try { aes = AESHelper.encrypt(name, KEY, IV); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } Toast.makeText(this, "加密后值为:"+aes, 0).show(); break; case R.id.button2: try { help = AESHelper.decrypt(aes, KEY, IV); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if(help.length()==0){ Toast.makeText(this, "解密失败!", 0).show(); }else{ Toast.makeText(this, help, 0).show(); } break; default: break; } } }

AES加密后,登录提示密码长度错误,请大神帮帮忙,谢谢!

1.先用md5加密: ``` public static String getMd5(String s) { char hexChar[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8' , '9', 'a', 'b', 'c', 'd', 'e', 'f','A', 'B', 'C', 'D', 'E', 'F'}; //md5加密算法的加密对象为字符数组,这里是为了得到加密的对象 byte[] b = s.getBytes(); try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(b); byte[] b2 = md.digest();// 进行加密并返回字符数组 char str[] = new char[b2.length << 1]; int len = 0; //将字符数组转换成十六进制串,形成最终的密文 for (int i = 0; i < b2.length; i++) { byte val = b2[i]; str[len++] = hexChar[(val >>> 4) & 0xf]; str[len++] = hexChar[val & 0xf]; } return new String(str); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } ``` 2.再用AES加密, ``` /** * AES 加密 * 密钥是apiSecret 的前16位 * 向量是apiSecret 的后16位 * @param password * @param apiSecret * @return * @throws Exception */ public static String getAesEncrypt(String password,String apiSecret)throws Exception{ String key = apiSecret.substring(0,16); String iv = apiSecret.substring(16); String md5Pass = getMd5(password); SecretKeySpec keyspec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes("UTF-8")); //System.out.println("密码的长度为:"+keyspec.getEncoded().length); Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); byte[] encrypted = cipher.doFinal(md5Pass.getBytes("UTF-8")); return bytesToHexString(encrypted); } public static String bytesToHexString(byte[] bs) { StringBuffer sb = new StringBuffer(); String hex = ""; for (int i = 0; i < bs.length; i++) { hex = Integer.toHexString(bs[i] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } sb.append(hex); } System.out.println("结果为:"+sb); return sb.toString(); } ``` 结果就提示:登录失败;加密后的密码长度错误 ![图片说明](https://img-ask.csdn.net/upload/201904/23/1556001375_850501.jpg)

C++ openssl aes加密失败

我在使用openssl的aes(cbc)加密字节超过96的字符串后,在解密就会少字符,下面是我写的代码,求大神指点下什么问题,AES一次加密的明文是有长度限制么? CooloiAES::CooloiAES() : MSG_LEN(0) { for(int i = 0; i < AES_BLOCK_SIZE; i++) { key[i] = 32 + i; } } CooloiAES::~CooloiAES() { } std::string CooloiAES::aes_encrypt(std::string msg) { int i = msg.size() / 16; MSG_LEN = ( i + 1 ) * 16; //MSG_LEN = msg.size() + 16; char in[MSG_LEN]; char out[MSG_LEN]; memset((char*)in,0,MSG_LEN); memset((char*)out,0,MSG_LEN); //strncpy((char*)in,msg.c_str(),msg.size()); //memcpy((char*)in,msg.data(),msg.size()); strcpy((char*)in,msg.c_str()); unsigned char iv[AES_BLOCK_SIZE]; //加密的初始化向量 for(int j = 0; j < AES_BLOCK_SIZE; ++j) { iv[j] = 0; } AES_KEY aes; if(AES_set_encrypt_key((unsigned char*)key, 128, &aes) < 0) { return NULL; } size_t len = strlen(in); std::cout << "LEN ::::: " << len << std::endl; AES_cbc_encrypt((unsigned char*)in,(unsigned char*)out,len,&aes,iv,AES_ENCRYPT); std::string encrypt_msg(&out[0],&out[MSG_LEN+16]); for(int i= 0;out[i];i++){ printf("%x",(unsigned char)out[i]); //std::cout << dstStringTemp[i]; } std::cout << std::endl; return encrypt_msg; } std::string CooloiAES::aes_decrypt(std::string msg) { MSG_LEN = msg.size(); char in[MSG_LEN]; char out[MSG_LEN+16]; memset((char*)in,0,MSG_LEN); memset((char*)out,0,MSG_LEN+16); //strncpy((char*)in,msg.c_str(),msg.size()); memcpy((char*)in,msg.data(),msg.size()); for(int i= 0;in[i];i++){ printf("%x",(unsigned char)in[i]); //std::cout << dstStringTemp[i]; } std::cout << std::endl; unsigned char iv[AES_BLOCK_SIZE]; //加密的初始化向量 for(int j = 0; j < AES_BLOCK_SIZE; ++j) { iv[j] = 0; } AES_KEY aes; if(AES_set_decrypt_key((unsigned char*)key, 128, &aes) < 0) { return NULL; } //int len = msg.size(); size_t len = strlen(in); AES_cbc_encrypt((unsigned char*)in,(unsigned char*)out,len,&aes,iv,AES_DECRYPT); std::string decrypt_msg = out; return decrypt_msg; } ``` ```

c#AES加密后得到的密文结尾总是出现“=”或“==”

最近用到c#AES加密,网上找了一些例子程序,但是运行后得到的结果总是带有==号,烦请各位大神指点!

C#AES加密时,怎么产生密钥和密钥向量?

各位大神好,最近在做一个一个项目,牵扯到加密,网上搜到了加密算法,但是不知道AES的机密密钥和密钥向量怎么产生?烦请各位为小弟指点一下~

在c++里怎么用aes(openssl)实现通信加密?

我之前写了一个程序,就是在c++里使用aes(openssl)加密消息后,再通过socket传送,加密后的二进制数据,我就直接存到了字符串里发送了出去,然后到了另一端就解密失败了,报错是539,有趣的是,我把这个消息再原封不动的转发回进行加密的那个程序中后,就可以解密了。因为以前也没有写过加解密的程序,所以也不知道是不是哪个地方的想法有问题,求大神指点迷津啊!!!!

关于OC上AES加密的问题

![图片说明](https://img-ask.csdn.net/upload/201601/20/1453274067_936076.jpg) 详细加密参数如图 字符串8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 密匙 da75f897aaf110b7 要得到如图的结果oc上面怎么写???求大神赐教

Python关于AES加密程序的运行出现error,有大神相助吗?

代码如下:(AES CBC模式加密) ``` # 导入图像处理标准库 from PIL import Image # 导入Cryptodome库,引用aes加密模块 from Cryptodome import AES import random import string # 随机生成16个由小写字母组成的字符串 def key_generator(size = 16, chars = string.ascii_lowercase): return ''.join(random.choice(chars) for _ in range(size)) #filename = "d:/blackhat.bmp" #filename_encrypted_cbc = "blackhat_encrypted_cbc" #formatt = "BMP" # 利用函数随机生成一个由小写字母组成的字符串 #key = key_generator(16) #print("key:"+key) # AES加密的明文空间为16的整数倍,不能整除,则需要进行填充 # 在对应的ascii中,"\x00"表示为0x00,具体的值为NULL,b表示以字节表示 def pad(data): return data + b"\x00" * (16 - len(data) % 16) # 将图像的数据映射为RGB def trans_format_rbg(data): # tuple:不可变,保证数据不丢失 red, green, blue = tuple(map(lambda e: [data[i] for i in range(0, len(data)) if i % 3 == e], [0, 1, 2])) pixels = tuple(zip(red, green, blue)) return pixels # CBC加密 def aes_cbc_encrypt(key1, data, mode=AES.MODE_CBC): # iv为随机值 iv = key_generator(16) aes = AES.new(key1, mode, iv) new_data = aes.encrypt(data) return new_data def encrypt_image_cbc(filename1): # 打开bmp图片,然后将之转换为RGB图像 im = Image.open(filename1) value_vector = im.convert("RGB").tobytes() # 将图像数据转换为像素值字节 imlength = len(value_vector) # 将填充、加密后的数据进行像素值映射 value_encrypt = trans_format_rbg(aes_cbc_encrypt(key, pad(value_vector))[:imlength]) # 创建一个新对象,存储相对应的值 im2 = Image.new(im.mode, im.size) im2.putdata(value_encrypt) # 将对象保存为对应格式的图像 im2.save(filename_encrypted_cbc + "." + formatt, format) # im2.save(filename_encrypted_cbc+".bmp") key = key_generator(16) filename = "d:/blackhat.bmp" filename_encrypted_cbc = "blackhat_encrypted_cbc" formatt = "BMP" encrypt_image_cbc(filename) im = Image.open(filename) im.show() ``` 运行后出现如下错误: Traceback (most recent call last): File "C:/Users/GYW/PycharmProjects/untitled/CBC encrypt", line 74, in <module> encrypt_image_cbc(filename) File "C:/Users/GYW/PycharmProjects/untitled/CBC encrypt", line 59, in encrypt_image_cbc value_encrypt = trans_format_rbg(aes_cbc_encrypt(key, pad(value_vector))[:imlength]) File "C:/Users/GYW/PycharmProjects/untitled/CBC encrypt", line 45, in aes_cbc_encrypt aes = AES.new(key1, mode, iv) File "C:\Users\GYW\PycharmProjects\untitled\venv\lib\site-packages\Cryptodome\AES.py", line 232, in new return _create_cipher(sys.modules[__name__], key, mode, *args, **kwargs) File "C:\Users\GYW\PycharmProjects\untitled\venv\lib\site-packages\Cryptodome\Cipher\__init__.py", line 79, in _create_cipher return modes[mode](factory, **kwargs) File "C:\Users\GYW\PycharmProjects\untitled\venv\lib\site-packages\Cryptodome\Cipher\_mode_cbc.py", line 274, in _create_cbc_cipher cipher_state = factory._create_base_cipher(kwargs) File "C:\Users\GYW\PycharmProjects\untitled\venv\lib\site-packages\Cryptodome\AES.py", line 103, in _create_base_cipher result = start_operation(c_uint8_ptr(key), File "C:\Users\GYW\PycharmProjects\untitled\venv\lib\site-packages\Cryptodome\Util\_raw_api.py", line 238, in c_uint8_ptr raise TypeError("Object type %s cannot be passed to C code" % type(data)) TypeError: Object type <class 'str'> cannot be passed to C code Process finished with exit code 1 刚接触python 求大神拉一把~

Java AES-256加密文件之后解密文件,文件被损坏

public static Cipher initAESCipher(String password, int cipherMode) { // 创建Key gen KeyGenerator keyGenerator = null; Cipher cipher = null; try { keyGenerator = KeyGenerator.getInstance("AES"); keyGenerator.init(256, new SecureRandom(password.getBytes())); SecretKey secretKey = keyGenerator.generateKey(); byte[] codeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(codeFormat, "AES"); cipher = Cipher.getInstance("AES/ECB/PKCS7Padding","BC"); // 初始化 cipher.init(cipherMode, key); return cipher; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); // To change body of catch statement use File | } catch (NoSuchPaddingException e) { e.printStackTrace(); // To change body of catch statement use File | } catch (InvalidKeyException e) { e.printStackTrace(); // To change body of catch statement use File | } catch (NoSuchProviderException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } ``` ``` public static void encrypt(File source, File target, String password) throws Exception { InputStream input = new FileInputStream(source); OutputStream ouput = new FileOutputStream(target); logger.debug("开始写入加密文件"); long start = System.currentTimeMillis(); CipherInputStream cipherInputStream = (CipherInputStream) encrypt(input, password); IOUtils.copy(cipherInputStream,ouput ); cipherInputStream.close(); input.close(); ouput.close(); logger.debug("完成文件加密,耗时:" + (System.currentTimeMillis() - start)); } ``` ``` public static InputStream encrypt(InputStream input, String password) { logger.debug("开始加密文件流"); long start = System.currentTimeMillis(); Cipher cipher = initAESCipher(password, Cipher.ENCRYPT_MODE); logger.debug("生成密钥耗时:" + (System.currentTimeMillis() - start)); Assert.notNull(cipher); // 以加密流写入文件 CipherInputStream cipherInputStream = new CipherInputStream(input, cipher); logger.debug("完成加密文件流,耗时:" + (System.currentTimeMillis() - start)); return cipherInputStream; } ``` ``` 目前发现加密DOCX,PPTX,ZIP等压缩类文件之后进行解密会产生头信息被损坏的现象,望各位大神提供下解决思路。

Android 小白求解AES加密遇到的问题

求大神指导:后台已经给了公钥,如何进行加密,网上找的方法,总是访问不能成功。该怎么解决。

APP接口安全问题,求大神指点

APP与后台接口间的数据传输加密使用3DES加密,但是3DES的密钥需要保存在APP中,这样很容易被获取,一旦密钥被获取,数据加密将不复存在。 所以我想使用RSA非对称加密方式传输3DES的密钥,用户登录时从服务器获取3DES的密钥,这个密钥是在服务器端经过RSA私钥加密的,APP获取后再用公钥解密,最终得到3DES密钥。 但是我有个问题,RSA的公钥是保存在APP中的,如果能够得到公钥,是不是也可以解密服务器经过RSA私钥传过来的密文了??那RSA的安全性何在??但是如果RSA公钥不保存在APP中,又能放在哪里呢? 求大神解答。

新人求帮啊!C++怎样完成基于AES加密算法的音视频播放器的实现

要求能满足边解密边播放边清空缓存的条件!不知到有大神能做的吗? C币神马的不是问题,可以的加Q细聊 qq:714491360

求大神指教。php大神指教

/^(.+):([0-9]+)$/ PHP的什么意思,前面的(.+是什么意思)

DES加密不一致问题,求大神解决

各位大神 小弟在做一个文件传输项目 对方系统用的是c#写的des加解密算法 密钥:Bank2014 加密偏移量:Bank2014 加密模式:CipherMode.CBC、PaddingMode.PKCS5 块长度:64 文件编码:GBK 小弟这边用的是c写的加解密算法我就只设置了密钥:Bank2014 代码是参照大赛写的 位置在:http://www.iteye.com/topic/478024 目前的问题就是对方公司加密出来的文件跟我加密出来的文件不一样 我的代码是否需要设置加密偏移量呢 还是代码本身就有问题 求大神指点 先跪谢了

请问超过1M壁以上的AES加密数据,用什么软件能够快速解密?

要解密AES/ECB/PKCS5Padding加密的数据,但数据比较大,有一些网站的解密工具会卡死,请各位大神能不能推荐AES解密的软件,能够快速解密数据。

C语言学习方法求大神指教

不知道该怎么学C语言,求大神指教, 不知道该怎么学C语言,求大神指教, 不知道该怎么学C语言,求大神指教, 不知道该怎么学C语言,求大神指教

求一个数组中选出任意个数元素相加之和,求大神指教

求一个数组中选出任意个数元素相加之和,求大神指教 比如打印出arry[8]中,任意两个数相加的和,任意三个数相加的和,直到任意八个数相加的和。 求大神指教。

http数据加密问题,求大神赐教。

在Javaweb中,在http数据交互中,怎样对数据进行加密。说的详细,明白,谢谢。

aes解密后明文为乱码的问题

自己尝试使用aes的cbc模式加密字符串,并解密字符串,并在最后使用OpenSSl自带的获取错误消息函数,获取错误信息,显示在加密和解密的过程中没有报错,但是将最后的明文结果输出,得到的始终是乱码啊。下面为自己写的代码,请各位大神看看啊 1. 1. #define SIZE 1000 1. #define BITS 128 1. using namespace std; 1. int main() 1. { 1. char in[50]; 1. cin.get(in, 50); 1. AES_KEY* Enkey = new(std::nothrow) AES_KEY; 1. AES_KEY* Dekey = new(std::nothrow) AES_KEY; 1. if (Dekey == nullptr || Enkey == nullptr) 1. { 1. return 0; 1. } 1. char userkey[16]="123456789012345"; 1. for (int i=0;i<16;++i) 1. { 1. userkey[i] = 32 + i; 1. } 1. AES_set_encrypt_key((const unsigned char*)userkey, BITS, Enkey); 1. AES_set_decrypt_key((const unsigned char*)userkey, BITS, Dekey); 1. 1. unsigned char* szOutEn; 1. unsigned char* szOutDe; 1. unsigned char szIvec[16]; 1. int len; 1. len = 0; 1. if ((strlen(in)+1)%16 == 0) 1. { 1. len = strlen(in) + 1; 1. } 1. else 1. { 1. len = (strlen(in) / 16 + 1) * 16; 1. } 1. szOutEn = new(std::nothrow) unsigned char[len]; 1. szOutDe = new(std::nothrow) unsigned char[len]; 1. if (nullptr == szOutEn || nullptr == szOutDe) 1. { 1. return 0; 1. } 1. 1. AES_cbc_encrypt((const unsigned char*)in, szOutEn, len, Enkey, szIvec, AES_ENCRYPT); 1. cout << "加密后的密文为:" << szOutEn << endl; 1. AES_cbc_encrypt((const unsigned char*)szOutEn, szOutDe, len, Dekey, szIvec, AES_DECRYPT); 1. 1. unsigned long ulErr = ERR_get_error(); 1. char szErrMsg[1024] = { 0 }; 1. char* pszTmp = nullptr; 1. pszTmp = ERR_error_string(ulErr, szErrMsg); 1. cout << "解密后的密文为:" << szOutDe << endl; 1. cout << szOutEn << endl; 1. cout << "错误码:" << ulErr<<endl; 1. cout << szErrMsg << endl; 1. /*AES_encrypt_BaseEncond((const unsigned char*)in, Enkey); 1. AES_decrypt_BaseDecode("Encode.txt", Dekey);*/ 1. delete Enkey; 1. delete Dekey; 1. cin.get(); 1. return 0; 1. }

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

相关热词 c# cad插入影像 c#设计思想 c#正则表达式 转换 c#form复制 c#写web c# 柱形图 c# wcf 服务库 c#应用程序管理器 c#数组如何赋值给数组 c#序列化应用目的博客园
立即提问