Crypto++库在VS 2013中的使用 + 基于操作模式AES加密

2023-05-16

一.   下载Crypto++ Library

Crypto++ Library的官方网:http://www.cryptopp.com/

 

二.   建立自己使用的Crypto++ Library

由于从官方网下载的Crypto++库是开源的,只有源文件和几个可以生成lib、dll的工程,以及一个使用的例子工程,因此希望生成自己建的工程能使用的SDK。

 

1.编译链接生成cryptlib.lib

打开cryptest.sln,分别在Debug模式和Release模式下编译链接cryptlib工程,成功后会在cryptopp54\Win32\output\debug和cryptopp54\Win32\output\release下生成cryptlib.lib文件。作者当时用的是Crypto++ 5.62版本。

Build时方法是,右击Solution Explorer中的cryptlib工程,单击build。第一次时它会报错,没关系,按这样再build一次,就可以build成功了。

2.  建立Crypto++ SDK

在C:\Program Files\中新建文件夹,取名“CryptoPP”,里面新建文件夹“include”、“lib”,在“lib”中新建文件夹“debug”、“release”。将Crypto++库中的所有头文件复制到“include”文件夹中,再将上面生成的两个cryptlib.lib分别复制到“debug”和“release”中。


三.  基于模式的AES加解密

1、20/13中新建Win32 Console Application工程,建立空的工程。完成后新建文件main.cpp,里面源码如下:

#include "stdafx.h"
#include <aes.h>
#include <Hex.h>      // StreamTransformationFilter
#include <modes.h>    // CFB_Mode
#include <iostream>   // std:cerr  
#include <sstream>   // std::stringstream  
#include <string>


using namespace std;
using namespace CryptoPP;
#pragma comment( lib, "cryptlib.lib" )

std::string ECB_AESEncryptStr(std::string sKey, const char *plainText)
{
    std::string outstr;
      
    //填key  
    SecByteBlock key(AES::MAX_KEYLENGTH);  
    memset(key,0x30,key.size() );  
    sKey.size()<=AES::MAX_KEYLENGTH?memcpy(key,sKey.c_str(),sKey.size()):memcpy(key,sKey.c_str(),AES::MAX_KEYLENGTH);  
          
      
    AES::Encryption aesEncryption((byte *)key, AES::MAX_KEYLENGTH);  
      
    ECB_Mode_ExternalCipher::Encryption ecbEncryption(aesEncryption);
    StreamTransformationFilter ecbEncryptor(ecbEncryption, new HexEncoder(new StringSink(outstr)));  
    ecbEncryptor.Put((byte *)plainText, strlen(plainText));  
    ecbEncryptor.MessageEnd();  
      
    return outstr;  
}  



std::string ECB_AESDecryptStr(std::string sKey, const char *cipherText)  
{  
    std::string outstr;  
      
    //填key  
    SecByteBlock key(AES::MAX_KEYLENGTH);  
    memset(key,0x30,key.size() );  
    sKey.size()<=AES::MAX_KEYLENGTH?memcpy(key,sKey.c_str(),sKey.size()):memcpy(key,sKey.c_str(),AES::MAX_KEYLENGTH);  
          
    ECB_Mode<AES >::Decryption ecbDecryption((byte *)key, AES::MAX_KEYLENGTH);  
          
    HexDecoder decryptor(new StreamTransformationFilter(ecbDecryption, new StringSink(outstr)));  
    decryptor.Put((byte *)cipherText, strlen(cipherText));  
    decryptor.MessageEnd();  
      
    return outstr;  
}  



std::string CBC_AESEncryptStr(std::string sKey, std::string sIV, const char *plainText)
{
    std::string outstr;
      
    //填key  
    SecByteBlock key(AES::MAX_KEYLENGTH);  
    memset(key,0x30,key.size() );  
    sKey.size()<=AES::MAX_KEYLENGTH?memcpy(key,sKey.c_str(),sKey.size()):memcpy(key,sKey.c_str(),AES::MAX_KEYLENGTH);  
          
    //填iv  
    byte iv[AES::BLOCKSIZE];  
    memset(iv,0x30,AES::BLOCKSIZE); 
sIV.size()<=AES::BLOCKSIZE?memcpy(iv,sIV.c_str(),sIV.size()):memcpy(iv,sIV.c_str(),AES::BLOCKSIZE);
      
    AES::Encryption aesEncryption((byte *)key, AES::MAX_KEYLENGTH);  
      
    CBC_Mode_ExternalCipher::Encryption cbcEncryption(aesEncryption, iv);  
      
    StreamTransformationFilter cbcEncryptor(cbcEncryption, new HexEncoder(new StringSink(outstr)));  
    cbcEncryptor.Put((byte *)plainText, strlen(plainText));  
    cbcEncryptor.MessageEnd();  
      
    return outstr;  
}  

std::string CBC_AESDecryptStr(std::string sKey, std::string sIV, const char *cipherText)  
{  
    std::string outstr;  
      
    //填key  
    SecByteBlock key(AES::MAX_KEYLENGTH);  
    memset(key,0x30,key.size() );  
    sKey.size()<=AES::MAX_KEYLENGTH?memcpy(key,sKey.c_str(),sKey.size()):memcpy(key,sKey.c_str(),AES::MAX_KEYLENGTH);  
          
    //填iv  
    byte iv[AES::BLOCKSIZE];  
    memset(iv,0x30,AES::BLOCKSIZE);  
sIV.size()<=AES::BLOCKSIZE?memcpy(iv,sIV.c_str(),sIV.size()):memcpy(iv,sIV.c_str(),AES::BLOCKSIZE);


    CBC_Mode<AES >::Decryption cbcDecryption((byte *)key, AES::MAX_KEYLENGTH, iv);  
          
    HexDecoder decryptor(new StreamTransformationFilter(cbcDecryption, new StringSink(outstr)));  
    decryptor.Put((byte *)cipherText, strlen(cipherText));  
    decryptor.MessageEnd();  
      
    return outstr;  
}  

std::string CBC_CTS_AESEncryptStr(std::string sKey, std::string sIV, const char *plainText)
{
    std::string outstr;
      
    //填key  
    SecByteBlock key(AES::MAX_KEYLENGTH);  
    memset(key,0x30,key.size() );  
    sKey.size()<=AES::MAX_KEYLENGTH?memcpy(key,sKey.c_str(),sKey.size()):memcpy(key,sKey.c_str(),AES::MAX_KEYLENGTH);  
          
    //填iv  
    byte iv[AES::BLOCKSIZE];  
    memset(iv,0x30,AES::BLOCKSIZE); 
sIV.size()<=AES::BLOCKSIZE?memcpy(iv,sIV.c_str(),sIV.size()):memcpy(iv,sIV.c_str(),AES::BLOCKSIZE);
      
    AES::Encryption aesEncryption((byte *)key, AES::MAX_KEYLENGTH);  
      
    CBC_CTS_Mode_ExternalCipher::Encryption cbcctsEncryption(aesEncryption, iv);  
      
    StreamTransformationFilter cbcctsEncryptor(cbcctsEncryption, new HexEncoder(new StringSink(outstr)));  
    cbcctsEncryptor.Put((byte *)plainText, strlen(plainText));  
    cbcctsEncryptor.MessageEnd();  
      
    return outstr;  
}  




std::string CBC_CTS_AESDecryptStr(std::string sKey, std::string sIV, const char *cipherText)  
{  
    std::string outstr;  
      
    //填key  
    SecByteBlock key(AES::MAX_KEYLENGTH);  
    memset(key,0x30,key.size() );  
    sKey.size()<=AES::MAX_KEYLENGTH?memcpy(key,sKey.c_str(),sKey.size()):memcpy(key,sKey.c_str(),AES::MAX_KEYLENGTH);  
          
    //填iv  
    byte iv[AES::BLOCKSIZE];  
    memset(iv,0x30,AES::BLOCKSIZE);  
sIV.size()<=AES::BLOCKSIZE?memcpy(iv,sIV.c_str(),sIV.size()):memcpy(iv,sIV.c_str(),AES::BLOCKSIZE);


    CBC_CTS_Mode<AES >::Decryption cbcctsDecryption((byte *)key, AES::MAX_KEYLENGTH, iv);  
          
    HexDecoder decryptor(new StreamTransformationFilter(cbcctsDecryption, new StringSink(outstr)));  
    decryptor.Put((byte *)cipherText, strlen(cipherText));  
    decryptor.MessageEnd();  
      
    return outstr;  
}  










std::string CFB_AESEncryptStr(std::string sKey, std::string sIV, const char *plainText)
{
    std::string outstr;
      
    //填key  
    SecByteBlock key(AES::MAX_KEYLENGTH);  
    memset(key,0x30,key.size() );  
    sKey.size()<=AES::MAX_KEYLENGTH?memcpy(key,sKey.c_str(),sKey.size()):memcpy(key,sKey.c_str(),AES::MAX_KEYLENGTH);  
          
    //填iv  
    byte iv[AES::BLOCKSIZE];  
    memset(iv,0x30,AES::BLOCKSIZE); 
sIV.size()<=AES::BLOCKSIZE?memcpy(iv,sIV.c_str(),sIV.size()):memcpy(iv,sIV.c_str(),AES::BLOCKSIZE);
      
    AES::Encryption aesEncryption((byte *)key, AES::MAX_KEYLENGTH);  
      
    CFB_Mode_ExternalCipher::Encryption cfbEncryption(aesEncryption, iv);  
      
    StreamTransformationFilter cfbEncryptor(cfbEncryption, new HexEncoder(new StringSink(outstr)));  
    cfbEncryptor.Put((byte *)plainText, strlen(plainText));  
    cfbEncryptor.MessageEnd();  
      
    return outstr;  
}  




std::string CFB_AESDecryptStr(std::string sKey, std::string sIV, const char *cipherText)  
{  
    std::string outstr;  
      
    //填key  
    SecByteBlock key(AES::MAX_KEYLENGTH);  
    memset(key,0x30,key.size() );  
    sKey.size()<=AES::MAX_KEYLENGTH?memcpy(key,sKey.c_str(),sKey.size()):memcpy(key,sKey.c_str(),AES::MAX_KEYLENGTH);  
          
    //填iv  
    byte iv[AES::BLOCKSIZE];  
    memset(iv,0x30,AES::BLOCKSIZE);  
sIV.size()<=AES::BLOCKSIZE?memcpy(iv,sIV.c_str(),sIV.size()):memcpy(iv,sIV.c_str(),AES::BLOCKSIZE);


    CFB_Mode<AES >::Decryption cfbDecryption((byte *)key, AES::MAX_KEYLENGTH, iv);  
          
    HexDecoder decryptor(new StreamTransformationFilter(cfbDecryption, new StringSink(outstr)));  
    decryptor.Put((byte *)cipherText, strlen(cipherText));  
    decryptor.MessageEnd();  
      
    return outstr;  
}  




std::string OFB_AESEncryptStr(std::string sKey, std::string sIV, const char *plainText)
{
    std::string outstr;
      
    //填key  
    SecByteBlock key(AES::MAX_KEYLENGTH);  
    memset(key,0x30,key.size() );  
    sKey.size()<=AES::MAX_KEYLENGTH?memcpy(key,sKey.c_str(),sKey.size()):memcpy(key,sKey.c_str(),AES::MAX_KEYLENGTH);  
          
    //填iv  
    byte iv[AES::BLOCKSIZE];  
    memset(iv,0x30,AES::BLOCKSIZE); 
sIV.size()<=AES::BLOCKSIZE?memcpy(iv,sIV.c_str(),sIV.size()):memcpy(iv,sIV.c_str(),AES::BLOCKSIZE);
      
    AES::Encryption aesEncryption((byte *)key, AES::MAX_KEYLENGTH);  
      
    OFB_Mode_ExternalCipher::Encryption ofbEncryption(aesEncryption, iv);  
      
    StreamTransformationFilter ofbEncryptor(ofbEncryption, new HexEncoder(new StringSink(outstr)));  
    ofbEncryptor.Put((byte *)plainText, strlen(plainText));  
    ofbEncryptor.MessageEnd();  
      
    return outstr;  
}  




std::string OFB_AESDecryptStr(std::string sKey, std::string sIV, const char *cipherText)  
{  
    std::string outstr;  
      
    //填key  
    SecByteBlock key(AES::MAX_KEYLENGTH);  
    memset(key,0x30,key.size() );  
    sKey.size()<=AES::MAX_KEYLENGTH?memcpy(key,sKey.c_str(),sKey.size()):memcpy(key,sKey.c_str(),AES::MAX_KEYLENGTH);  
          
    //填iv  
    byte iv[AES::BLOCKSIZE];  
    memset(iv,0x30,AES::BLOCKSIZE);  
sIV.size()<=AES::BLOCKSIZE?memcpy(iv,sIV.c_str(),sIV.size()):memcpy(iv,sIV.c_str(),AES::BLOCKSIZE);


    OFB_Mode<AES >::Decryption ofbDecryption((byte *)key, AES::MAX_KEYLENGTH, iv);  
          
    HexDecoder decryptor(new StreamTransformationFilter(ofbDecryption, new StringSink(outstr)));  
    decryptor.Put((byte *)cipherText, strlen(cipherText));  
    decryptor.MessageEnd();  
      
    return outstr;  
}  


std::string CTR_AESEncryptStr(std::string sKey, std::string sIV, const char *plainText)
{
    std::string outstr;
      
    //填key  
    SecByteBlock key(AES::MAX_KEYLENGTH);  
    memset(key,0x30,key.size() );  
    sKey.size()<=AES::MAX_KEYLENGTH?memcpy(key,sKey.c_str(),sKey.size()):memcpy(key,sKey.c_str(),AES::MAX_KEYLENGTH);  
          
    //填iv  
    byte iv[AES::BLOCKSIZE];  
    memset(iv,0x30,AES::BLOCKSIZE); 
sIV.size()<=AES::BLOCKSIZE?memcpy(iv,sIV.c_str(),sIV.size()):memcpy(iv,sIV.c_str(),AES::BLOCKSIZE);
      
    AES::Encryption aesEncryption((byte *)key, AES::MAX_KEYLENGTH);  
      
    CTR_Mode_ExternalCipher::Encryption ctrEncryption(aesEncryption, iv);  
      
    StreamTransformationFilter ctrEncryptor(ctrEncryption, new HexEncoder(new StringSink(outstr)));  
    ctrEncryptor.Put((byte *)plainText, strlen(plainText));  
    ctrEncryptor.MessageEnd();  
      
    return outstr;  
}  




std::string CTR_AESDecryptStr(std::string sKey, std::string sIV, const char *cipherText)  
{  
    std::string outstr;  
      
    //填key  
    SecByteBlock key(AES::MAX_KEYLENGTH);  
    memset(key,0x30,key.size() );  
    sKey.size()<=AES::MAX_KEYLENGTH?memcpy(key,sKey.c_str(),sKey.size()):memcpy(key,sKey.c_str(),AES::MAX_KEYLENGTH);  
          
    //填iv  
    byte iv[AES::BLOCKSIZE];  
    memset(iv,0x30,AES::BLOCKSIZE);  
sIV.size()<=AES::BLOCKSIZE?memcpy(iv,sIV.c_str(),sIV.size()):memcpy(iv,sIV.c_str(),AES::BLOCKSIZE);


    CTR_Mode<AES >::Decryption ctrDecryption((byte *)key, AES::MAX_KEYLENGTH, iv);  
          
    HexDecoder decryptor(new StreamTransformationFilter(ctrDecryption, new StringSink(outstr)));  
    decryptor.Put((byte *)cipherText, strlen(cipherText));  
    decryptor.MessageEnd();  
      
    return outstr;  
}  


int _tmain(int argc, _TCHAR* argv[])
{
string plainText = "This Program shows how to use ECB, CBC, CBC_CTS, CFB, OFB and CTR mode of AES in Crypto++.";
string aesKey = "0123456789ABCDEF0123456789ABCDEF";//256bits, also can be 128 bits or 192bits
string aesIV = "ABCDEF0123456789";//128 bits
string ECB_EncryptedText,ECB_DecryptedText,
CBC_EncryptedText,CBC_DecryptedText,
CBC_CTS_EncryptedText,CBC_CTS_DecryptedText,
CFB_EncryptedText,CFB_DecryptedText,
OFB_EncryptedText,OFB_DecryptedText,
CTR_EncryptedText,CTR_DecryptedText;


//ECB
ECB_EncryptedText = ECB_AESEncryptStr(aesKey, plainText.c_str());//ECB加密
ECB_DecryptedText = ECB_AESDecryptStr(aesKey,ECB_EncryptedText.c_str());//ECB解密


//CBC
CBC_EncryptedText = CBC_AESEncryptStr(aesKey, aesIV, plainText.c_str());//CBC加密
CBC_DecryptedText = CBC_AESDecryptStr(aesKey, aesIV, CBC_EncryptedText.c_str());//CBC解密


//CBC_CTS
CBC_CTS_EncryptedText = CBC_CTS_AESEncryptStr(aesKey, aesIV, plainText.c_str());//CBC_CTS加密
CBC_CTS_DecryptedText = CBC_CTS_AESDecryptStr(aesKey, aesIV, CBC_CTS_EncryptedText.c_str());//CBC_CTS解密

//CFB
CFB_EncryptedText = CFB_AESEncryptStr(aesKey, aesIV, plainText.c_str());//CFB加密
CFB_DecryptedText = CFB_AESDecryptStr(aesKey, aesIV, CFB_EncryptedText.c_str());//CFB解密


//OFB
OFB_EncryptedText = OFB_AESEncryptStr(aesKey, aesIV, plainText.c_str());//OFB加密
OFB_DecryptedText = OFB_AESDecryptStr(aesKey, aesIV, OFB_EncryptedText.c_str());//OFB解密


//CTR
CTR_EncryptedText = CTR_AESEncryptStr(aesKey, aesIV, plainText.c_str());//CTR加密
CTR_DecryptedText = CTR_AESDecryptStr(aesKey, aesIV, CTR_EncryptedText.c_str());//CTR解密




cout << "Crypto++ AES-256 加密测试"<< endl;
cout << "分别使用ECB,CBC, CBC_CTR,CFB,OFB和CTR模式"<< endl;
cout << "加密用密钥:" << aesKey << endl;
cout << "密钥长度:" << AES::MAX_KEYLENGTH*8 <<"bits" << endl;
cout << "IV:" << aesIV << endl;
cout << endl;


cout << "ECB测试"<< endl;
cout << "原文:" << plainText << endl;
cout << "密文:" << ECB_EncryptedText << endl;
cout << "恢复明文:" << ECB_DecryptedText << endl << endl;

cout << "CBC测试"<< endl;
cout << "原文:" << plainText << endl;
cout << "密文:" << CBC_EncryptedText << endl;
cout << "恢复明文:" << CBC_DecryptedText << endl << endl;


cout << "CBC_CTS测试"<< endl;
cout << "原文:" << plainText << endl;
cout << "密文:" << CBC_CTS_EncryptedText << endl;
cout << "恢复明文:" << CBC_CTS_DecryptedText << endl << endl;


cout << "CFB测试"<< endl;
cout << "原文:" << plainText << endl;
cout << "密文:" << CFB_EncryptedText << endl;
cout << "恢复明文:" << CFB_DecryptedText << endl << endl;

cout << "OFB测试"<< endl;
cout << "原文:" << plainText << endl;
cout << "密文:" << OFB_EncryptedText << endl;
cout << "恢复明文:" << OFB_DecryptedText << endl << endl;


cout << "CTR测试"<< endl;
cout << "原文:" << plainText << endl;
cout << "密文:" << CTR_EncryptedText << endl;
cout << "恢复明文:" << CTR_DecryptedText << endl << endl;

getchar();
return 0;
}

2   2、设置工程属性

      选择工程属性(Alt + F7):

     (1)“Configuration Properties”→“C/C++” →“General”,右边的“Additional Include Directories”设置为上面建好的Crypto++ SDK的         Include文件夹,“C:\Program Files\CyptoPP\include”;

     (2) “Configuration Properties”→“Linker” →“General”,右边的“Additional Library Directories”设置为上面建好的Crypto++ SDK的Lib\Debug文件夹,“C:\Program Files\CyptoPP\lib\debug”(Release模式下对应着Release文件夹);

     (3) “Configuration Properties”→“C/C++” →“Code Generation”,右边的“Runtime Library”设置为“Multi-threaded Debug (/MTd)”(Release模式下对应着“Multi-threaded (/MT)”)

3、 运行程序 (Ctrl + F5)

输出结果如下:




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Crypto++库在VS 2013中的使用 + 基于操作模式AES加密 的相关文章

  • 决策树CART、ID3、C4.5原理梳理

    老饼讲解机器学习 http ml bbbdata com teach 108 目录 一 学习决策树原理的顺序 二 CART分类树 一 分类树模型结构 二 分类树构建过程 二 剪枝 防止过拟合 xff09 三 CART回归树模型 四 ID3算
  • 麻将胡牌判定方法-索引法

    麻将胡牌判定方法 xff08 查表法 xff0c 翻译自http hp vector co jp authors VA046927 mjscore mjalgorism html xff09 麻将高速判定胡牌方法说明使用索引法如何检查所有形
  • 基于msOS-stm32系统选择的想法

    由于换了家公司 xff0c 虽然都要从事底层代码开发 xff0c 但由于算是跨行业了 xff0c 很多东西都需要从新开始 xff0c 很是麻烦和头疼 xff0c 所以感觉轻易不要换行业 还好主要核心没有改变多大 xff0c 没多久就适应了
  • aop 使用案例

    1 主要使用场景 xff1a 数据比对 xff0c 本系统数据库内部数据和第三方数据比对是否一致 xff0c 差别 因为需要时间比较长 xff0c 避免用户短时间重复点击问题 aop 通过注解的方式 xff0c 根据请求地址和参数 xff0
  • 解决pom文件project标签爆红波浪线,一直提示:Could not find artifact xxx from xxx,格式不规范,从pdf资料中拷贝pom依赖各种却死活无法下载依赖且爆红

    解决了pom文件project标签爆红波浪线 一直提示 xff1a Could not find artifact xxx from xxx 格式不规范 从pdf资料中拷贝pom依赖各种却死活无法下载依赖且爆红等原因 样例1 spring
  • CentOS tomcat自启动

    CentOS tomcat自启动 在CentOS 7 操作系统上安装Tomcat xff0c 默认是不能进行服务自启动的 而对于Web应用而言 xff0c 服务器reboot后 xff0c 必须需要能够自动启动 在 usr lib syst
  • Java基础之爬虫

    文章目录 前言一 本地爬虫二 网络爬虫 前言 如下文本 xff0c 请按要求爬取数据 java自从95年问世以来 xff0c 经历了很多版本 xff0c 目前企业中用的最多的是java8和java11 xff0c 因为这两个是长期支持版本
  • Ubuntu远程SSH及x11vnc远程桌面连接

    一 连接SSH 1 开启ssh sudo apt update 更新源列表 sudo apt get install openssh server 安装ssh服务 sudo ps e grep ssh 查看ssh服务是否启动 如图则已开启
  • 配置编译带cuda版本并支持cudacodec硬编解码opencv库笔记

    写这个笔记主要是记录配置编译opencv 43 cuda 43 cudacodec的过程核经历 xff0c 这里面的坑实在太多 参考文章 xff1a https note youdao com ynoteshare1 index html
  • SSH登录CentOS服务器并在Docker中运行和显示GUI程序的方法

    SSH和Docker都是字符界面 xff0c 以前都是通过字符界面登录服务器并运行Docker中的程序 xff0c 将输出结果 xff08 视频或者图片 xff09 传回来进行结果查看和分析 xff0c 这样效率太低了 xff0c 于是周末
  • 字符数组及字符串 是否添加'\0'

    lt span style 61 34 font family Arial Helvetica sans serif background color rgb 255 255 255 34 gt lt span gt lt span sty
  • MapReduce编程(入门篇)

    一 MapReduce 编程模型 还是以一个经典的图片来说明问题 1 首先 我们能确定我们有一份输入 而且他的数据量会很大 2 通过split之后 他变成了若干的分片 每个分片交给一个Map处理 3 map处理完后 tasktracker会
  • 如何优雅的用 VScode 编写 C++ 大型项目?

    vscode远程开发配置 由于后面项目用到了epoll和splice xff0c 这些都是unix环境中才有的调用 xff0c 所以我们还是需要在linux环境中开发 xff0c 我选用的vscode连接linux进行远程开发 选用vsco
  • Ubuntu16.04安装常用开发软件

    xff08 1 xff09 gcc和g 43 43 sudo apt span class hljs attribute get span install build span class hljs attribute essential
  • 用python爬取电影名,演员,评分等并存入excel

    1在python环境下找到安装python的路径 2在这个文件名后cmd 43 enter进入黑框 3在黑框中安装jupyter notebook 黑框中也可以安装其他python编辑是需要用的包 4创建一个学习python的文件夹 xff
  • matlab cody学习笔记 day16

    这道题目如果要理逻辑其实还挺麻烦的 xff0c 所以打算好好理理这道题目 xff08 1 xff09 Find the longest sequence of 1 39 s in a binary sequence Given a stri
  • matlab GUI学习笔记1 如何生成一个GUI文件,及如何修改保存后的.fig文件

    最近需要做一个项目的小软件 xff0c 学习如何用matlab GUI生成一个小软件 xff0c 带对话框等等 所以这几天对matlab GUI的分步学习进行记录 我的matlab版本是R2017a 首先是如何在matlab中生成一个GUI
  • SDN相关题目

    1 判断题知识点 xff1a OpenDaylight 难度 xff1a 初级 科目 xff1a SDN Maven是一个采用纯Java编写的开源项目管理工具 对 错 回答错误正确答案 xff1a 对 解析 xff1a Maven是JAVA
  • Podman 使用指南

    原文链接 xff1a Podman 使用指南 Podman 原来是 CRI O 项目的一部分 xff0c 后来被分离成一个单独的项目叫 libpod Podman 的使用体验和 Docker 类似 xff0c 不同的是 Podman 没有
  • matlab GUI学习笔记2 如何关闭窗口和打开新的窗口 如何计算输入的数据

    今天主要是三个内容 xff1a xff08 1 xff09 如何关闭窗口 xff1b xff08 2 xff09 打开新的窗口 xff1b xff08 3 xff09 如何计算输入的数据 xff0c 并显示结果 xff08 1 xff09

随机推荐

  • matlab GUI学习笔记3 如何添加axes并刷新计算结果,以及初始化axes的句柄。

    从昨天开始matlab GUI的编程需要用到图像显示了 xff0c 也就是axes插件 xff0c 里面涉及到很多问题 xff0c 一一记录下来解决方法 xff08 1 xff09 首先添加axes xff0c 很简单 图像显示框的名称叫坐
  • matlab 小tips 如何保存大的矩阵文件

    今天为了提高程序运行速度 xff0c 把中间值的矩阵打算存成文件 xff0c save的时候报错了 xff0c 原因是要保存的矩阵超过了2G 解决方法很简单 xff0c 就是在save语句的最后添加一个 39 v7 3 39 就成功了 sa
  • matlab GUI学习笔记6 如何更改窗口标题,以及设置edit/text输入框的默认值

    写了好久的本子 xff0c 老师又给软件提了些要求 xff0c 需要进行修改 xff08 1 xff09 更改窗口标题 为了方便窗口编程 xff0c 每个窗口的名称都设置的很明了 xff0c 例如下图这样 xff0c 这个窗口对应的就是主窗
  • matlab cody学习笔记 day23 判断输入的是否是向量

    好久没更新了 xff0c 今天刷一道 1 Problem 605 Whether the input is vector Given the input x return 1 if x is vector or else 0 我本来想的是获
  • 串口通信校验方式(even,odd,space,mark)

    无校验 xff08 no parity xff09 奇校验 xff08 odd parity xff09 xff1a 如果字符数据位中 34 1 34 的数目是偶数 xff0c 校验位为 34 1 34 xff0c 如果 34 1 34 的
  • Eigen介绍及简单使用

    Eigen是可以用来进行线性代数 矩阵 向量操作等运算的C 43 43 库 xff0c 它里面包含了很多算法 它的License是MPL2 它支持多平台 Eigen采用源码的方式提供给用户使用 xff0c 在使用时只需要包含Eigen的头文
  • APM最新固件(20181220)

    ardupilot Makefile MAKEFILE LISTWAF BINARY 61 modules waf waf lightWAF 61 python WAF BINARY WAF FLAGSEXPLICIT COMMANDS 6
  • Java考试复习

    java考试复习 1 判断题 单选题 填空题看网上测试 xff1b 注意 xff01 xff01 xff01 xff08 单选题答案里面的粗黑的有分号是代表同时满足 xff1b 填空题答案里面的粗黑的有分号是代表其中一个就满足 xff09
  • 计算机网络之第4章 网络层

    计算机网络 第4章 网络层 网络层概述 以下属于网络层范畴的是 IP地址在因特网使用的TCP IP协议栈中 xff0c 核心协议是 IP 网络层提供的两种服务 TCP IP参考模型的网络层提供的是 无连接不可靠的数据报服务 IPv4地址概述
  • 中标麒麟Linux服务器5.0(mips64el)安装QT开发环境

    中标麒麟服务器5 0 xff08 mips64el xff09 上QT开发需要用到can口 xff0c 原版自带的QT不包含相关模块 xff0c 故重新下载一个带有can模块的qt版本进行安装 该系统架构是mips64el的 xff0c 所
  • mavros永远连接失败

    之前在做无人机使用px4源码避障的实物实验 xff0c 已经有了无人机 xff0c 想按照惯例先在nvidia NX上位机上跑一下仿真实验测试一下 xff0c 结果mavros用了一万种方法 xff0c 就是连不上 xff0c 仿真跑不了
  • 成功解决mingw下载太慢的问题

    MinGW w64 for 32 and 64 bit Windows Browse Files at SourceForge net 1 在此页面下滑找到你要下载的文件 2 点击Problems Downloadings 3 选择一个合适
  • PyQt5学习笔记9_使用setStyle和setStyleSheet进行换肤

    通过QStyleFactory keys 可获取用于setStyle的有效值 xff0c 本例程中包含 Windows xff0c WindowsXP xff0c WindowsVista xff0c Fusion 四种风格 xff0c 此
  • mkdir 创建目录

    参数选项 参数说明 p 连续创建目录 mkdir data 创建目录data 或 cd mkdir data 或 cd mkdir data 注 xff1a 是将两条命令分隔开 mkdir p data b c 连续创建目录 data b
  • CC, TBD, EOD都是什么鬼?拯救一写英文邮件就发慌

    职场新人在工作中经常听到这样的对话 xff1a 给客户的邮件记得CC我 xff0c BCC给财务 xff0c 告诉客户合同签订时间还TBD But CC BCC TBD到底是什么鬼 xff1f 马上来恶补一下职场英文缩写 xff0c 拯救一
  • Apache Openmeetings安装介绍

    翻译自Apache OpenMeetings 更新时间 xff1a 2017 01 11 目录 目录Openmeetings安装端口NAT设置自定义硬件需求Debian链接更新日志VoIP提示和技巧 Openmeetings安装 从过往版本
  • Could not transfer artifact xxx from/to xxx解决方案

    在做Openmeetings二次开发的时候install时出现了如下错误 INFO Parent project loaded span class hljs keyword from span repository org apache
  • MavenInvocationException解决方案

    在编译Openmeetings的时候出现了这样的错误信息 xff1a MavenInvocationException Error configuring command line Reason Maven executable not f
  • 生成生命周期介绍

    翻译自http maven apache org guides introduction introduction to the lifecycle html 目录 目录生成生命周期基础 生成生命周期由阶段组成通用命令行调用一个生成阶段是由
  • Crypto++库在VS 2013中的使用 + 基于操作模式AES加密

    一 下载Crypto 43 43 Library Crypto 43 43 Library的官方网 xff1a http www cryptopp com 二 建立自己使用的Crypto 43 43 Library 由于从官方网下载的Cry