char

C++利用openssl进行公钥解密

半世苍凉 提交于 2020-03-28 02:47:44
私钥加密的部分内容,需要用公钥解密下面的实例代码,由于私钥加密后的字符串有不可打印字符,所以程序里面进行了base64,要用的时候先解dec base64 再传递给函数 进行解密 #include <stdio.h> #include <stdlib.h> #ifdef WIN32 #include <windows.h> #endif #include "openssl/rsa.h" #include "openssl/pem.h" #include "Base64.h" #ifdef WIN32 #pragma comment(lib,"User32.lib") #pragma comment(lib,"Advapi32.lib") #pragma comment(lib,"Gdi32.lib") #pragma comment(lib,"libeay32.lib") #pragma comment(lib,"ssleay32.lib") #endif // 私钥解密 std::string rsa_pri_decrypt(const std::string &cipherText, const std::string &priKey) { std::string strRet; RSA *rsa = RSA_new(); BIO *keybio; keybio = BIO

socket编程的select模型

爷,独闯天下 提交于 2020-03-28 01:56:57
在掌握了socket相关的一些函数后,套接字编程还是比较简单的,日常工作中碰到很多的问题就是客户端/服务器模型中,如何让服务端在同一时间高效的处理多个客户端的连接,我们的处理办法可能会是在服务端不停的监听客户端的请求,有新的请求到达时,开辟一个新的线程去和该客户端进行后续处理,但是这样针对每一个客户端都需要去开辟一个新的线程,效率必定底下。 其实,socket编程提供了很多的模型来处理这种情形,我们只要按照模型去实现我们的代码就可以解决这个问题。主要有select模型和重叠I/o模型,以及完成端口模型。这次,我们主要介绍下select模型,该模型又分为普通select模型,wsaasyncselect模型,wsaeventselect模型。我们将通过样例代码的方式逐一介绍。 一、select模型 使用该模型时,在服务端我们可以开辟两个线程,一个线程用来监听客户端的连接 请求,另一个用来处理客户端的请求。主要用到的函数为select函数。如: 全局变量: fd_set g_fdClientSock; 线程1处理函数: SOCKET listenSock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(7788);

判断栈和堆的生长方向

旧时模样 提交于 2020-03-27 21:22:15
如何判断栈的增长方向? 对于一个用惯了i386系列机器的人来说,这似乎是一个无聊的问题,因为栈就是从高地址向低地址增长。不过,显然这不是这个问题的目的,既然把这个问题拿出来,问的就不只是i386系列的机器,跨硬件平台是这个问题的首先要考虑到的因素。 在一个物质极大丰富的年代,除非无路可退,否则我们坚决不会使用汇编去解决问题,而对于这种有系统编程味道的问题,C是一个不错的选择。那接下来的问题就是如何用C去解决这个问题。 C在哪里会用到栈呢?稍微了解一点C的人都会立刻给出答案,没错,函数。我们知道,局部变量都存在于栈之中。似乎这个问题立刻就得到了解答,用一个函数声明两个局部变量,然后比较两个变量的地址,这样就可以得到答案。 等一下,怎么比较两个变量的地址呢? 先声明的先入栈, 所以,它的第一个变量的地址如果是高的,那就是从上向下增长。“先声明的先入栈”?这个结论从何而来?一般编译器都会这么处理。要是不 一般呢?这种看似正确的方法实际上是依赖于编译器的,所以,可移植性受到了挑战。 那就函数加个参数,比较参数和局部变量的位置,参数肯定先入栈。那为什么不能局部变量先入栈?第一反应是怎么可能,但仔细想来又没有什么不可以。所以,这种方法也依赖于编译器的实现。 那到底什么才不依赖于编译器呢? 不妨回想一下,函数如何调用。执行一个函数时,这个函数的相关信息都会出现栈之中,比如参数、返回地址和局部变量

SQL CAST, CONVERT 比较

拈花ヽ惹草 提交于 2020-03-27 18:41:38
本文转自:http://blog.csdn.net/wobuwei/archive/2009/08/18/4458185.aspx if (@StartTime > @EndTime) Set @EndTime = cast ( convert ( char , @ScheduleDate + 1 , 101)+' '+ convert ( char , @EndTime, 108) as datetime ) Else Set @EndTime = cast ( convert ( char , @ScheduleDate , 101)+' '+ convert ( char , @EndTime, 108) as datetime ) Set @StartTime = cast ( convert ( char , @ScheduleDate , 101)+' '+ convert ( char , @StartTime, 108) as datetime ) 这条语句中的Convert,Cast 的意思,作用 Convert (data_type[,length],expression[,style]) 这个转换函数一般在时间类型和字符串类型转换的时候才用到. style格式在转换时间时候的格式如下: Style(2位表示年份) | Style(4位表示年份) |

Java中String、StringBuilder以及StringBuffer

风流意气都作罢 提交于 2020-03-27 08:33:39
原文出处: 海子 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String、StringBuilder和StringBuffer这几个类,分析它们的异同点以及了解各个类适用的场景。下面是本文的目录大纲: 一.你了解String类吗? 二.深入理解String、StringBuffer、StringBuilder 三.不同场景下三个类的性能测试 四.常见的关于String、StringBuffer的面试题(辟谣网上流传的一些曲解String类的说法) 若有不正之处,请多多谅解和指正,不胜感激。 一.你了解String类吗? 想要了解一个类,最好的办法就是看这个类的实现源代码,String类的实现在 \jdk1.6.0_14\src\java\lang\String.java 文件中。 打开这个类文件就会发现String类是被final修饰的: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character

循环练习

╄→尐↘猪︶ㄣ 提交于 2020-03-27 03:34:13
//循环(计算某个数的位数) 输入一个正整数, 计算这个正整数的位数 //int main(int argc, const char * argv[]) { // int n; // int cnt=0; // scanf("%d", &n); // while (n) { // cnt++; // n/=10; // } // printf("cnt = %d\n", cnt); // // return 0; //} //a=1 b=1 //a+b/a 2/1 a = 2 b = 1 //a+b/a 3/2 a = 3 b = 2 //a+b/a 5/3 a = 5 b = 3 //... //9 流程控制(数值序列2) 输出数字序列 2/1,3/2,5/3,8/5,13/8,21/13...,输出个数由键盘输入。注意输入使用scanf输入 feibonaqi //\ //比如: // //输入 3输出为 // //2/1 //3/2 //5/3 // //输入 4 输出为 //2/1 //3/2 //5/3 //8/5 //\ //int main(int argc,const char *argv[]) //{ // int n; // int a=1,b=1; // scanf("%d", &n); // for (int i=0; i<n; i++) { // int

std::string

 ̄綄美尐妖づ 提交于 2020-03-27 00:33:20
#pragma once class _String_val //字符串存储,16字节或者大于16字节的堆指针, // base class for basic_string to hold data { public: enum { // length of internal buffer, [1, 16],15个字符+\0 _BUF_SIZE = 16; union _Bxty { // storage for small buffer or pointer to larger one _Elem _Buf[_BUF_SIZE]; _Elem *_Ptr; char _Alias[_BUF_SIZE]; // to permit aliasing } _Bx; size_type _Mysize; // 字符串大小, current length of string size_type _Myres; // 分配空间大小 current storage reserved for string }; void _Xlen() const;// _Xlength_error("string too long"); void _Xran() const;// _Xout_of_range("invalid string position"); class string{ public

开始学习编程

余生颓废 提交于 2020-03-26 12:47:52
变量 什么是变量?简单的说变量就是编程中最基本的存储单位,变量会暂时性地存储你放进去的东西。 比如:answer=42; answer就是一个标识符,“=” 就是赋值符,“42” 就是值 下面我们在Python中给变量复制:比如a=12; 这就完成了a的赋值,结果为12 需要注意的是Python对大小写比较敏感,也就是说“a” 和 “A“ 会是两个不同的变量,而不是同一个。 这样我们就学会了给变量起名字了,并且他们随叫随到。 print() 打印是Python中最常用的功能,我们现在就简单把print()这个功能理解为展示打印的结果。使用方法是吧你要打印查看结果对象塞进括号中,这样就可以了。 如果你使用命令行或终端直接输入print(b),你会得到下面的结果,因为你漏掉了变量的赋值,Python是无法打印不存在的对象的。 在以后我们使用Python还有很多很多东西需要打印。即使变量是最容易理解的基础知识,也不要因为简单就随意命名,一定要保持Python的可读性。 命名法分类 匈牙利命名法:开头字母用变量类型的缩写,其余部分用变量的英文或英文的缩写,要求单词第一个字母大写 ex: int iMyAge; “i”是int类型的缩写 char cMyName[10]; “c”是char类型的缩写 float fManHeight; “f”是flota类型的缩写 驼峰式命名法

Java的char是16位的unicode类型

守給你的承諾、 提交于 2020-03-26 09:51:31
Java的char是16位的unicode类型,中文也是,两个字节,但是如果用utf-8(一般系统默认)读取或者转换为字节数组,就会变成3个字节。 Unicode是字符集,UTF-8/UTF-16是编码规则,或者广义的Unicode就包括字符集和多种编码规则。也就是说字符集规定了每个字符的二进制代码,编码规则才规定了如何存储这些二进制代码。 然后utf-16有个大端序(Big Endian order)和小端序(Little Endian order)的问题(utf-8的更复杂,所以这也是最好不要在windows下编程的原因)。 在Java中,对于一个中文字符的char,getByte的结果,如果不指定编码规则,则 默认是UTF-8,一个中文3个字节 ,如果是 unicode或者utf-16,默认是4个字节,前两个字节0xFEFF表示大端序,0xFFEF表示小端序 ,如果 指定了utf-16be或者utf-16le,就是2个字节 , package IOTest; import javax.management.StandardEmitterMBean; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.nio.charset

字符串移位包含的问题

若如初见. 提交于 2020-03-26 06:40:42
问题: 给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含。例如,S1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。 解法一:从题目中可以看出,我们可以使用最直接的方法对S1进行循环移动,再进行字符串包含的判断,从而遍历其所有的可能性。字符串循环移动,时间复杂度为O(n),字符串包含判断,采用普通的方法,时间复杂度为O(n*m), 总体复杂度为O(n*n*m) 。字符串包含判断,若采用KMP算法,时间复杂度为O(n),这样总体的复杂度为O(n*n)。若字符串的长度n较大,显然效率比较低。其中n为S1的长度,m为S2的长度。 #include<iostream> using namespace std; /* strstr函数说明 包含文件:string.h 函数名: strstr 函数原型:extern char *strstr(char *str1, char *str2); 功能:从字符串str1中查找是否有字符串str2,如果有,从str1中的str2位置起,返回str1中str2起始位置的指针,如果没有,返回null。 返回值:返回该位置的指针,如找不到,返回空指针。 */ int rotate_conbine(char *src,char *dec) { int len