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. }

2个回答

你可以直接赋值in变量试试,如:char *in="asdfghjkl";

楼上的方法试了,不对啊

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
为什么解密返回会出现部分乱码!!!!!!

这个是一个查询接口的返回信息。为什么其他部分的内容都可以显示,可是名字却是无法解析,是一堆的问号!!!,然后界面上显示的也是乱码的![图片说明](https://img-ask.csdn.net/upload/201704/18/1492481659_245355.png)![图片说明](https://img-ask.csdn.net/upload/201704/18/1492481839_586100.png)

AES解密失败原因找到后,历史数据还有什么办法解出来吗

用AES加密算法加密,windows系统加解密正常,可在linux系统中加密正常,但linux上加密的数据在linux上解不出来,在window上也解不出来,问题原因已找到,并已修改,可原先在linux上产生的加密数据怎样才能解密?原始加密方法: ``` public static String encrypt(String content, String key) { if (isEmpty(key)) { return encrypt(content); } try { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128, new SecureRandom(key.getBytes(encodFormat))); byte[] bytes = kgen.generateKey().getEncoded(); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(bytes, "AES")); byte[] result = cipher.doFinal(content.getBytes(encodFormat)); StringBuffer sb = new StringBuffer(); for (int i = 0; i < result.length; i++) { String hex = Integer.toHexString(result[i] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } sb.append(hex.toUpperCase()); } return sb.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } ``` 原始解密方法: ``` /** * 解密 * * @param content * @param securityKey * @return */ public static String decrypt(String content, String securityKey) { if (isEmpty(securityKey)) { return decrypt(content); } byte[] bytes = new byte[content.length() / 2]; for (int i = 0; i < content.length() / 2; i++) { int high = Integer.parseInt(content.substring(i * 2, i * 2 + 1), 16); int low = Integer.parseInt(content.substring(i * 2 + 1, i * 2 + 2), 16); bytes[i] = (byte) (high * 16 + low); } try { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128, new SecureRandom(securityKey.getBytes())); SecretKey secretKey = kgen.generateKey(); SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getEncoded(), "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); byte[] result = cipher.doFinal(bytes); return new String(result); } catch (Exception e) { e.printStackTrace(); } return null; } ``` 现在已经找到原因了,修改后的代码已经能满足所有系统加解密,可是历史数据怎么破解?下边是修改后的代码: ``` package com.ecotech.loginservice.util; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.security.SecureRandom; /** * Created by kajya * Date: 2019/06/04 */ public class AESUtil { /** * 编码格式 */ private static final String ENCODING = "UTF-8"; /** * 加密算法 */ public static final String KEY_ALGORITHM = "AES"; /** * 签名算法 */ public static final String SIGN_ALGORITHMS = "SHA1PRNG"; /** * 加密 * * @param content 待加密内容 * @param key 加密的密钥 * @return */ public static String encrypt(String content, String key) { try { KeyGenerator kgen = KeyGenerator.getInstance(KEY_ALGORITHM); SecureRandom random = SecureRandom.getInstance(SIGN_ALGORITHMS); random.setSeed(key.getBytes(ENCODING)); kgen.init(128, random); SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, KEY_ALGORITHM); Cipher cipher = Cipher.getInstance(KEY_ALGORITHM); byte[] byteContent = content.getBytes(ENCODING); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); byte[] byteRresult = cipher.doFinal(byteContent); StringBuffer sb = new StringBuffer(); for (int i = 0; i < byteRresult.length; i++) { String hex = Integer.toHexString(byteRresult[i] & 0xFF); if (hex.length() == 1) hex = '0' + hex; sb.append(hex.toUpperCase()); } return sb.toString(); } catch (Exception e) { e.toString(); } return null; } /** * 解密 * * @param content 待解密内容 * @param key 解密的密钥 * @return */ public static String decrypt(String content, String key) { if (content.length() < 1) return null; byte[] byteRresult = new byte[content.length() / 2]; for (int i = 0; i < content.length() / 2; i++) { int high = Integer.parseInt(content.substring(i * 2, i * 2 + 1), 16); int low = Integer.parseInt(content.substring(i * 2 + 1, i * 2 + 2), 16); byteRresult[i] = (byte) (high * 16 + low); } try { KeyGenerator kgen = KeyGenerator.getInstance(KEY_ALGORITHM); SecureRandom random = SecureRandom.getInstance(SIGN_ALGORITHMS); random.setSeed(key.getBytes(ENCODING)); kgen.init(128, random); SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, KEY_ALGORITHM); Cipher cipher = Cipher.getInstance(KEY_ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); byte[] result = cipher.doFinal(byteRresult); return new String(result, ENCODING); } catch (Exception e) { e.toString(); } return null; } } ``` 现在需要把原始加密方法加密的数据都解密出来,解密失败,linux系统加密产生的历史数据,还有办法解出来吗? 附一条测试数据: key:E10ADC3949BA59ABBE56E057F20F883E 密文内容:3BC14F72DADE3A0107373BA8E9ECC377FDCF7F4ECE85698169E6E799FD54F3453E03D1AFA84AD963AD8A7D5E88C977FFC3E43902564EEFA29995640B2548E814F3B772C91D5EE710F9F84479C86F2EEB

IOS openssl AES加密是乱码

我需要AES/ECB/PKCS5Padding 加密方式,但是IOS只有PKCS7Padding,我要如何才能使用PKCS5Padding?

AES用CBC解密后在ios端要么数据丢失,要么解密失败

后端JavaAES CBC方式加密json文件前端h5获取json进行解密,在Android下没问题数据解析正常,但是在ios有的机器数据解析出来丢失了一段。成了不完整的json串。有的机型直接解密失败。!!!!求大佬解救。 后端加密 ![加密](https://img-ask.csdn.net/upload/201905/05/1557034142_862463.png) -- 前端解密 ![前端解密](https://img-ask.csdn.net/upload/201905/05/1557034066_126318.png)

AES解密出现意外的截断

源文件经过AES加密后,文件二进制数据如以下16字节: { 0xC3, 0x33, 0xDB, 0x50, 0x6D, 0x00, 0xF0, 0x48, 0xC9, 0x60, 0x3C, 0x51, 0x4A, 0x1C, 0x8B, 0x0E } 在进行解密的时候,以char型字符数组读取的时候,编译器默认读到0x00就认为数据到末尾了,但是实际上并没有。秘钥有时也会出现这个问题。 我尝试将十六进制数据转换成int型,但是解密后数据不再是以前的数据了。请问应该怎么才能正确读取并解压数据呢?

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

openssl aes_256_cbc加解密的问题。

小弟这里有一个程序,使用的是openssl的库函数。 使用的解密关键函数是这样: ``` EVP_DecryptInit(&ctx, aes_256_cbc, key, iv); EVP_DecryptUpdate(&ctx, masterkey, &masterkey_len1, encrypted_masterkey, encrypted_masterkey_len); EVP_DecryptFinal(&ctx, masterkey + masterkey_len1, &masterkey_len2); ``` 其中key长度为32字节,iv长度为16字节。 masterkey_len1 为32字节,encrypted_masterkey_len 为48字节。 这里我就有些不懂了,为什么加密后的长度为48字节,与加密前的不太一样。 iv长度为16字节,我是否可以理解成明文长度分组应该是16字节? 但是如果这里不是16字节,也就是明文分组进行了padding,变成了24字节。那么就有新问题,iv是16字节,如何与padding后24字节的分组进行的异或运算? 所以我对此有些不解。大致的问题分为以下3个方面: 1、openssl中aes_256_cbc的明文分组长度是多少? 2、是否进行了padding?padding的模式是哪一种? 3、为何加密长度大于了原本明文长度,也就是解密出来的明文为何会小于密文长度?

关于AES加密解密的问题

想问一下,AES对相同的两个数进行加密,比如都是1,得到的加密数据相同吗?我现在在做对一组数据的加密解密,加密过后的两个相同的数据经过解密之后就不相等了,是我的程序有问题,还是本身算法是这样的呢,因为不太懂,还请大侠们指教啊

c++ 调用openssl库AES_cbc_encrypt加解密padding解密如何去除

与服务器http通信。加密:AES_set_encrypt_key(AesKey, 128, &aes); AES_cbc_encrypt(input_string, encrypt_string, len, &aes, AesIvp, AES_ENCRYPT); 过去的字段后面添加的padding补全没问题。服务器返回的密文解密: AES_set_decrypt_key(AesKey, 128, &aes); AES_cbc_encrypt((unsigned char*)Dncrypt_string, (unsigned char*)encrypt_string, nlen, &aes, AesIvp, AES_DECRYPT); 解密出来的后面会多出padding乱码。请问哪位大神知道如何安全的去除解密后的padding。

在golang中对AES解密的紧急返回

<div class="post-text" itemprop="text"> <p>I have implemented AES encryption on an angular app which sends encrypted string to a REST api written in golang which then decrypts it to verify if its a valid key or not.</p> <p>Encryption and decryption is working on angular app and golang separately but rest API returns Panic when we decrypt string sent from angular app </p> <p>Following is my code on app to encrypt in component file</p> <pre><code>import * as CryptoJS from 'crypto-js'; var key = "NPZ8fvABP5pKwU3"; // passphrase used to encrypt let encrypted_text = CryptoJS.AES.encrypt('Hello World', 'NPZ8fvABP5pKwU3'); </code></pre> <p>When I decrypt it with following code it returns "Hello World" on angular app </p> <pre><code>var bytes = CryptoJS.AES.decrypt(encrypted_text.toString(), 'NPZ8fvABP5pKwU3'); var plaintext = bytes.toString(CryptoJS.enc.Utf8); console.log(plaintext); </code></pre> <p>It fails to return same text in rest api with following code in main.go file</p> <pre><code>package main import ( "crypto/aes" "crypto/cipher" "crypto/md5" "crypto/rand" "encoding/hex" "fmt" "io" ) func decrypt(data []byte, passphrase string) []byte { key := []byte(createHash(passphrase)) block, err := aes.NewCipher(key) if err != nil { panic(err.Error()) } gcm, err := cipher.NewGCM(block) if err != nil { panic(err.Error()) } nonceSize := gcm.NonceSize() nonce, ciphertext := data[:nonceSize], data[nonceSize:] plaintext, err := gcm.Open(nil, nonce, ciphertext, nil) if err != nil { panic(err.Error()) } return plaintext } func main() { key2 := "NPZ8fvABP5pKwU3" key3 := []byte("encrypted string from angular app") plaintext := decrypt(key3, key2) fmt.Printf(string(plaintext)) } func createHash(key string) string { hasher := md5.New() hasher.Write([]byte(key)) return hex.EncodeToString(hasher.Sum(nil)) } </code></pre> <p><a href="https://play.golang.org/p/iGYyg0RB-Zi" rel="nofollow noreferrer">https://play.golang.org/p/iGYyg0RB-Zi</a></p> <p>returned error </p> <pre><code>panic: cipher: message authentication failed </code></pre> </div>

用AES解密中用到问题,线下本地可以,线上就出现了问题,怎么解决

本人开发小程序对encryptedData解密出现的问题 线下本地可以没有报错,线上就出现了问题! ![图片说明](https://img-ask.csdn.net/upload/201909/13/1568352145_29303.png) 我jar包是有这个JCEPERKey类的,就是运行时JVM找不到,线下本地运行环境是window,线上服务器运行环境是linux,是运行环境的问题吗,很是挠头!

java 3DES 解密时部分乱码

3DES 解密时,出现部分乱码,byte数组里有负值,不知道如何解决 ,求大神指导,代码如下: ``` import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import javax.crypto.spec.IvParameterSpec; /*字符串 DESede(3DES) 加密 * ECB模式/使用PKCS7方式填充不足位,目前给的密钥是192位 * 3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的 * 加密标准),是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加 * 密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的 * 密钥,P代表明文,C代表密表,这样, * 3DES加密过程为:C=Ek3(Dk2(Ek1(P))) * 3DES解密过程为:P=Dk1((EK2(Dk3(C))) * */ public class url { private static final String Algorithm = "DESede/CBC/NoPadding"; //定义加密算法,可用 DES,DESede,Blowfish private static final String key="CCBJF2014cowell20151118Y"; private static final String vi = "KW2015rj"; //keybyte为加密密钥,长度为24字节 //src为加密后的缓冲区 public static String decryptMode(String strMi){ try { //szSrc.getBytes("UTF-8"); byte[] src = com.sun.org.apache.xml.internal.security.utils.Base64.decode(strMi); //src = it.sauronsoftware.base64.Base64.encode(src); DESedeKeySpec dks = new DESedeKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede"); SecretKey securekey = keyFactory.generateSecret(dks); IvParameterSpec iv = new IvParameterSpec(vi.getBytes()); Cipher cipher = Cipher.getInstance(Algorithm); cipher.init(Cipher.DECRYPT_MODE, securekey,iv ); byte[] encoded = cipher.doFinal(src);//在单一方面的加密或解密 //Base64.encode(encoded); return new String(encoded); } catch (java.security.NoSuchAlgorithmException e1) { // TODO: handle exception e1.printStackTrace(); }catch(javax.crypto.NoSuchPaddingException e2){ e2.printStackTrace(); }catch(java.lang.Exception e3){ e3.printStackTrace(); } return null; } public static void main(String[] args) throws UnsupportedEncodingException { // TODO Auto-generated method stub //添加新安全算法,如果用JCE就要把它添加进去 String szSrc = "G6ZT+GxPq7JkGuLjVQ4TUAUyTcp+UnNpsoKGzy5FudtRNn6v9tSyWmxpcnFu01Rk8Th0NoV0E8TIhffliYQ4xQicG8ciVYWP2s+jk192tJrF6x6WV0ej2w=="; szSrc.getBytes("UTF-8"); System.out.println("jie密前的字符串:" + szSrc); System.out.println("jie密后的字符串:" + decryptMode(szSrc)); //byte[] srcBytes = decryptMode(keyBytes,encoded); //System.out.println("解密后的字符串:" + (new String(srcBytes))); } } ```

delphi 的AES解码方法求解

delphi 通过CnAes.pas调用的AES解码方法 CBC 流解密 procedure DecryptAESStreamCBC(Source: TStream; Count: Cardinal; const Key: TAESKey128; const InitVector: TAESBuffer; Dest: TStream); overload; 密文:ZCeSw78CTOPvCZ4bIFd5UOTfHdrCBJNC5h6+/MIHMKcBrT02j1XQrUkDPa8EelQ/ 主密钥master_key:0123456789ABCDEF 偏移量: 85A8D4B2854165A1 用CnAes中的方法总会在后面报错地址访问的错误,原码被我更改的不像样了,就不贴了,求大佬推荐个好用Aes解码的方法或者CnAes解码的演示例子 补充下我的代码吧: procedure TForm1.btn1Click(Sender: TObject); var vStr, vData,vKey, vOffset : string; SS, DS: TMemoryStream; AESKey128 : TAESKey128; pFusion : TAESBuffer; I : integer; p: PAnsiChar; tls:TStringList; begin vOffset := '85A8D4B2854165A1'; CopyMemory(@pFusion[0], @vStr[1], length(vStr)); vKey := '0123456789ABCDEF'; vData := 'ZCeSw78CTOPvCZ4bIFd5UOTfHdrCBJNC5h6+/MIHMKcBrT02j1XQrUkDPa8EelQ/'; SS := TMemoryStream.Create(); SS.Write(PAnsiChar(@vData[1])^, Length(vData)); SS.Position := 0; DS := TMemoryStream.Create(); FillChar(AESKey128, SizeOf(AESKey128), 0 ); Move(PChar(vKey)^, AESKey128, Min(SizeOf(AESKey128), Length(vKey))); FillChar(pFusion, SizeOf(pFusion), 0 ); Move(PAnsiChar(vOffset)^, pFusion, Min(SizeOf(pFusion), Length(vOffset))); //DecryptAESStreamCBC是CnAes中的方法 DecryptAESStreamCBC(SS, SS.Size - SS.Position, AESKey128, pFusion, DS); SetLength(vStr, DS.Size); Move(PAnsiChar(DS.Memory)^, vStr[1], DS.Size); vStr := UTF8Decode(vStr); showmessage(vStr); end;

以下Android AES解密 怎么在iOS里实现

以下是Android 里面的AES解密方法,有谁能在iOS里面实现的,非常感谢 public static String decrypt(String content, String key) { //反序列化AES密钥 SecretKeySpec keySpec = new SecretKeySpec(Base64.decodeBase64(key.getBytes()), "AES"); //128bit全零的IV向量 byte[] iv = new byte[16]; for (int i = 0; i < iv.length; i++) { iv[i] = 0; } IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); try { Cipher deCipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); deCipher.init(Cipher.DECRYPT_MODE, keySpec, ivParameterSpec); byte[] encryptedBytes = Base64.decodeBase64(content.getBytes()); byte[] bytes = deCipher.doFinal(encryptedBytes); return new String(bytes); } catch (Exception e) { return ""; } }

使用准备好的语句提取MySQL信息时,使用AES解密

<div class="post-text" itemprop="text"> <p>After being educated yesterday about trying to hash my usernames I decided on using the AES_ENCRYPT and DECRYPT functions in MySQL to securely store my usernames. As it stands I'm able to encrypt and store them in my database with this:</p> <pre><code>$con=mysqli_connect($servername, $dbusername, $dbpassword, $dbname); if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $stmt = $con-&gt;prepare("INSERT INTO users (username, password) VALUES (AES_ENCRYPT(?, '$aesKey'), ?)"); $stmt-&gt;bind_param("ss", $username, $password); $username = $_POST['username']; $plainPass = $_POST['password']; $password = password_hash($plainPass, PASSWORD_ARGON2I); $stmt-&gt;execute(); $stmt-&gt;close(); $con-&gt;close(); echo "&lt;script&gt; location.href='login.php'; &lt;/script&gt;"; } ?&gt; </code></pre> <p>I'm using a 256 bit encryption key which is loaded from a config file and is called as <code>$aesKey</code></p> <p>However, when I try and log in I'm unable to. Nothing happens. No SQL errors are printed but I do get <code>PHP Notice: Undefined variable: username</code>. Here's the code:</p> <pre><code>$submittedUser = $_POST['username']; $submittedPass = $_POST['password']; $con=mysqli_connect($servername, $dbusername, $dbpassword, $dbname); if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } if ($stmt = mysqli_prepare($con, "SELECT * FROM users Where username =AES_DECRYPT(?, '$aesKey')")) { mysqli_stmt_bind_param($stmt, "s", $submittedUser); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); echo mysqli_error($con); } while($row = mysqli_fetch_array($result)) { $username = $row['username']; $password = $row['password']; } if ($submittedUser == $username &amp;&amp; password_verify($submittedPass, $password)) { $_SESSION['user']=$username; //echo "&lt;script&gt; location.href='index.php'; &lt;/script&gt;"; // exit; } else { //echo "&lt;script&gt; location.href='login.php'; &lt;/script&gt;"; // exit; } mysqli_close($con); } ?&gt; </code></pre> <p>I commented out the redirects as I was originally thinking they were what was causing the error messages not to be printed. Can anyone help me out? I can't seem to figure out what's not working.</p> <p>Edit: I changed the statement back to <code>"SELECT * FROM users Where username =AES_ENCRYPT(?, '$aesKey')"</code> and I receive the following output:</p> <pre><code>Array ( [0] =&gt; 5�uY��V�s~"�ܮ� [username] =&gt; 5�uY��V�s~"�ܮ� [1] =&gt; $argon2i$v=19$m=1024,t=2,p=2$akcuREppYk1ERjRlUi5ZQw$yIdC5oMblekARArcB0XjwwmWywJ824iM8FmKqAu+9ys [password] =&gt; $argon2i$v=19$m=1024,t=2,p=2$akcuREppYk1ERjRlUi5ZQw$yIdC5oMblekARArcB0XjwwmWywJ824iM8FmKqAu+9ys )` </code></pre> <p>Edit 2: Here is the database structure. The unencrypted username should be evan and the unhashed password should be edwards.</p> <pre><code>-- -- Table structure for table `users` -- CREATE TABLE `users` ( `username` text NOT NULL, `password` text NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Dumping data for table `users` -- INSERT INTO `users` (`username`, `password`) VALUES ('5ÇuY¯úVõs~\"ÐÜ®€', '$argon2i$v=19$m=1024,t=2,p=2$NWZQS2Q3dE1ORndjaUdpWg$vOR3DBT+IhdAXIt7YUPDiExalf1lsMeIVe/zTZDDYfU'); </code></pre> <p>Edit 3: Running the following code:</p> <pre><code>&lt;?php include 'config.php'; $con=mysqli_connect($servername, $dbusername, $dbpassword, $dbname); $result = mysqli_query($con,"SELECT * FROM `users`"); while($row = mysqli_fetch_array($result)) { echo $row['username']; echo "&lt;br&gt;"; echo $row['password']; } mysqli_close($con); ?&gt; </code></pre> <p>Gives me the following result:</p> <pre><code>5�uY��V�s~"�ܮ� $argon2i$v=19$m=1024,t=2,p=2$NWZQS2Q3dE1ORndjaUdpWg$vOR3DBT+IhdAXIt7YUPDiExalf1lsMeIVe/zTZDDYfU </code></pre> </div>

aescbc加解密程序,调用了openssl库,在输出时为什么密文长度总是和初始向量长度一样?

memset(miyao, 0, 17); GetDlgItemText(hwnd,IDC_EDIT1,ivec,sizeof(ivec)); GetDlgItemText(hwnd,IDC_EDIT2,miyao,sizeof(miyao)); GetDlgItemText(hwnd,IDC_EDIT3,in,sizeof(in)); length=strlen(in); AES_set_encrypt_key(miyao, 128, &ckey); AES_cbc_encrypt( in,out,length,&ckey,ivec, AES_ENCRYPT); sprintf_s(out,"%X",out); SetDlgItemText(hwnd,IDC_EDIT4,out); } ![![图片说明](https://img-ask.csdn.net/upload/201412/29/1419863280_111654.png)图片说明](https://img-ask.csdn.net/upload/201412/29/1419863267_482880.png)

用C#解密JAVA的AES加密字符串

附JAVA的加密方法 public static String encrypt(String s, String token) { try { byte[] key = Hex.toBytes(token); return encryptBase64URLSafe(s, key); } catch (Exception e) { // e.printStackTrace(); return null; } } public static byte[] toBytes(String s) { int len = s.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16)); } return data; } private static String encryptBase64URLSafe(String s, byte[] key) { BaseEncoding b64 = BaseEncoding.base64Url().omitPadding(); byte[] encryptedBytes = encryptBytes(s, key); return b64.encode(encryptedBytes); } private static byte[] encryptBytes(String s, byte[] key) { if (key == null) { return null; } // 判断Key是否为16位 if (key.length != 16) { return null; } SecretKeySpec skeySpec = new SecretKeySpec(key, "AES"); try { Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] encrypted = cipher.doFinal(s.getBytes("utf-8")); return encrypted; } catch (Exception e) { return null; } } 这个用C#怎么解密啊,大家帮帮忙,我尝试了很多方法都不行 在Convert.FromBase64String(encryptedText);时就报错

websphere下的应用aes解密报错

java.security.InvalidKeyException: Illegal key size 网上搜的 是替换官方提供的无政策限制文件到本地jdk中 但是这个在was上行不通 换了以后不但不起作用...而且was的启动停止 都会报security的错..... 求大神啊.....帮帮忙= -

aes gcm解密问题(把java解密函数转换成C++版本)

val nonce = reader.readBits(96) val tag = reader.readBits(128) val ciphertext = reader2.readBits(bitsLeft) val cipher = Cipher.getInstance("AES/GCM/NoPadding") val keySpec = SecretKeySpec(EncryptionToken, "AES") val paramSpec = GCMParameterSpec(128, nonce) cipher.init(Cipher.DECRYPT_MODE, keySpec, paramSpec); cipher.update(ciphertext) val plaintext = cipher.doFinal(tag) 这是kotlin代码,用的是java的解密库 求高手翻译成C++版,用现成的解密库也可以 我的C++ val nonce = reader.ReadBits(96); val tag = reader.ReadBits(128); var bitsLeft = reader.GetBitsLeft(); val ciphertext = reader2.ReadBits(bitsLeft); int ciphelegth = bitsLeft/8; std::vector<uint8> out_tmp; out_tmp.resize(ciphelegth); mbedtls_gcm_context ctx; mbedtls_cipher_id_t cipher = MBEDTLS_CIPHER_ID_AES; mbedtls_gcm_init(&ctx); int ret = mbedtls_gcm_setkey(&ctx, cipher, (unsigned char*)EncryptionToken.c_str(), 128); uint8 iv[16]; memset(iv, 0, 16); memcpy(iv, &nonce[0], 12); ret = mbedtls_gcm_crypt_and_tag(&ctx, MBEDTLS_GCM_DECRYPT, ciphelegth, iv, 12, NULL, 0, &ciphertext[0], &out_tmp[0], 16, &tag[0]); ret 也是0,但是数据是不对的,请高手看看为什么调用失败

定量遥感中文版 梁顺林著 范闻捷译

这是梁顺林的定量遥感的中文版,由范闻捷等翻译的,是电子版PDF,解决了大家看英文费时费事的问题,希望大家下载看看,一定会有帮助的

Java 最常见的 200+ 面试题:面试必备

这份面试清单是从我 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘在 Java 技术栈中,还有那些知识点是我不知道的,我想找到这些技术盲点,然后修复它,以此来提高自己的技术水平。虽然我是从 2009 年就开始参加编程工作了,但我依旧觉得自己现在要学的东西很多,并且学习这些知识,让我很有成就感和满足感,那所以何乐而不为呢? 说回面试的事,这份面试...

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

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

远程工具,免费

远程工具,免费

java jdk 8 帮助文档 中文 文档 chm 谷歌翻译

JDK1.8 API 中文谷歌翻译版 java帮助文档 JDK API java 帮助文档 谷歌翻译 JDK1.8 API 中文 谷歌翻译版 java帮助文档 Java最新帮助文档 本帮助文档是使用谷

csma/ca和csma/cd的matlab仿真源代码带有详细的注释

csma/ca和csma/cd的matlab仿真源代码带有详细的注释,载波侦听,随意设置节点数,带有炫酷的图形展示效果。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

软件测试入门、SQL、性能测试、测试管理工具

软件测试2小时入门,让您快速了解软件测试基本知识,有系统的了解; SQL一小时,让您快速理解和掌握SQL基本语法 jmeter性能测试 ,让您快速了解主流来源性能测试工具jmeter 测试管理工具-禅道,让您快速学会禅道的使用,学会测试项目、用例、缺陷的管理、

pokemmo的资源

pokemmo必须的4个rom 分别为绿宝石 火红 心金 黑白 还有汉化补丁 资源不错哦 记得下载

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

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

无线通信中的智能天线:IS-95和第3代CDMA应用_.pdf

无线通信中的智能天线:IS-95和第3代CDMA应用_.pdf

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

课程亮点: 课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点 课程内容: 工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、原型模型、代理模式、单例模式、适配器模式 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式 课程特色: 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 笔记以超链接形式让知识点关联起来,形式知识体系 采用先概念后实例再应用方式,知识点深入浅出 提供授课内容笔记作为课后复习以及工作备查工具 部分图表(电脑PC端查看):

Java8零基础入门视频教程

这门课程基于主流的java8平台,由浅入深的详细讲解了java SE的开发技术,可以使java方向的入门学员,快速扎实的掌握java开发技术!

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

人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。 本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 --------------------------------------------------------------- 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+700元编程礼包。 &nbsp;

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

想学好JAVA必须要报两万的培训班吗? Java大神勿入 如果你: 零基础想学JAVA却不知道从何入手 看了一堆书和视频却还是连JAVA的环境都搭建不起来 囊中羞涩面对两万起的JAVA培训班不忍直视 在职没有每天大块的时间专门学习JAVA 那么恭喜你找到组织了,在这里有: 1. 一群志同道合立志学好JAVA的同学一起学习讨论JAVA 2. 灵活机动的学习时间完成特定学习任务+每日编程实战练习 3. 热心助人的助教和讲师及时帮你解决问题,不按时完成作业小心助教老师的家访哦 上一张图看看前辈的感悟: &nbsp; &nbsp; 大家一定迫不及待想知道什么是极简JAVA学习营了吧,下面就来给大家说道说道: 什么是极简JAVA学习营? 1. 针对Java小白或者初级Java学习者; 2. 利用9天时间,每天1个小时时间; 3.通过 每日作业 / 组队PK / 助教答疑 / 实战编程 / 项目答辩 / 社群讨论 / 趣味知识抢答等方式让学员爱上学习编程 , 最终实现能独立开发一个基于控制台的‘库存管理系统’ 的学习模式 极简JAVA学习营是怎么学习的? &nbsp; 如何报名? 只要购买了极简JAVA一:JAVA入门就算报名成功! &nbsp;本期为第四期极简JAVA学习营,我们来看看往期学员的学习状态: 作业看这里~ &nbsp; 助教的作业报告是不是很专业 不交作业打屁屁 助教答疑是不是很用心 &nbsp; 有奖抢答大家玩的很嗨啊 &nbsp; &nbsp; 项目答辩终于开始啦 &nbsp; 优秀者的获奖感言 &nbsp; 这是答辩项目的效果 &nbsp; &nbsp; 这么细致的服务,这么好的氛围,这样的学习效果,需要多少钱呢? 不要1999,不要199,不要99,只要9.9 是的你没听错,只要9.9以上所有就都属于你了 如果你: 1、&nbsp;想学JAVA没有基础 2、&nbsp;想学JAVA没有整块的时间 3、&nbsp;想学JAVA没有足够的预算 还等什么?赶紧报名吧,抓紧抢位,本期只招300人,错过只有等时间待定的下一期了 &nbsp; 报名请加小助手微信:eduxy-1 &nbsp; &nbsp;

Python数据清洗实战入门

本次课程主要以真实的电商数据为基础,通过Python详细的介绍了数据分析中的数据清洗阶段各种技巧和方法。

董付国老师Python全栈学习优惠套餐

购买套餐的朋友可以关注微信公众号“Python小屋”,上传付款截图,然后领取董老师任意图书1本。

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

MySQL 8.0.19安装教程(windows 64位)

话不多说直接开干 目录 1-先去官网下载点击的MySQL的下载​ 2-配置初始化的my.ini文件的文件 3-初始化MySQL 4-安装MySQL服务 + 启动MySQL 服务 5-连接MySQL + 修改密码 先去官网下载点击的MySQL的下载 下载完成后解压 解压完是这个样子 配置初始化的my.ini文件的文件 ...

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

Ubuntu18.04安装教程

Ubuntu18.04.1安装一、准备工作1.下载Ubuntu18.04.1 LTS2.制作U盘启动盘3.准备 Ubuntu18.04.1 的硬盘空间二、安装Ubuntu18.04.1三、安装后的一些工作1.安装输入法2.更换软件源四、双系统如何卸载Ubuntu18.04.1新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列...

sql语句 异常 Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your

在我们开发的工程中,有时候会报 [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ------ 这种异常 不用多想,肯定是我们的sql语句出现问题,下面...

西南交通大学新秀杯数学建模试题

题目比较难,如果符合大家的口味欢迎大家下载哈,提高你的思维想象能力

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

课程演示环境:Windows10; cuda 10.2; cudnn7.6.5; Python3.7; VisualStudio2019; OpenCV3.4 需要学习ubuntu系统上YOLOv4的同学请前往:《YOLOv4目标检测实战:训练自己的数据集》 课程链接:https://edu.csdn.net/course/detail/28745 YOLOv4来了!速度和精度双提升! 与 YOLOv3 相比,新版本的 AP (精度)和 FPS (每秒帧率)分别提高了 10% 和 12%。 YOLO系列是基于深度学习的端到端实时目标检测方法。本课程将手把手地教大家使用labelImg标注和使用YOLOv4训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。 本课程的YOLOv4使用AlexyAB/darknet,在Windows系统上做项目演示。包括:安装软件环境、安装YOLOv4、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算)和先验框聚类分析。还将介绍改善YOLOv4目标检测性能的技巧。 除本课程《Windows版YOLOv4目标检测实战:训练自己的数据集》外,本人将推出有关YOLOv4目标检测的系列课程。请持续关注该系列的其它视频课程,包括: 《Windows版YOLOv4目标检测实战:人脸口罩佩戴检测》 《Windows版YOLOv4目标检测实战:中国交通标志识别》 《Windows版YOLOv4目标检测:原理与源码解析》

Spring Boot -01- 快速入门篇(图文教程)

Spring Boot -01- 快速入门篇 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到【慕课网】手机 app,去找【Spring Boot 2.0 深度实践】的课程,令人开心的是,课程完全免费! 什么是 Spring Boot? Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot...

相关热词 c# 解析cad c#数字格式化万 c#int转byte c#格式化日期 c# wpf 表格 c# 实现ad域验证登录 c#心跳包机制 c#使用fmod.dll c#dll vb 调用 c# outlook
立即提问
相关内容推荐