資源簡介
基于openssl庫實現的在linux平臺上的公鑰加密、私鑰解密,sslsocket服務器,sslsocketlient客戶端,3des加密解密

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#define?MAXBUF?1024
void?ShowCerts(SSL?*?ssl)
{
????X509?*cert;
????char?*line;
????cert?=?SSL_get_peer_certificate(ssl);
????if?(cert?!=?NULL)?{
????????printf(“數字證書信息:\n“);
????????line?=?X509_NAME_oneline(X509_get_subject_name(cert)?0?0);
????????printf(“證書:?%s\n“?line);
????????free(line);
????????line?=?X509_NAME_oneline(X509_get_issuer_name(cert)?0?0);
????????printf(“頒發者:?%s\n“?line);
????????free(line);
????????X509_free(cert);
????}?else?{
????????printf(“無證書信息!\n“);
????}
}
int?main(int?argc?char?**argv)
{
????int?sockfd?len;
????struct?sockaddr_in?dest;
????char?buffer[MAXBUF?+?1];
????SSL_CTX?*ctx;
????SSL?*ssl;
????if?(argc?!=?3)?{
????????printf(“參數格式錯誤!正確用法如下:\n\t\t%s?IP地址?端口\n\t比如:\t%s?127.0.0.1?80\n此程序用來從某個“
????????????????“IP?地址的服務器某個端口接收最多?%d?個字節的消息.\n“?argv[0]?argv[0]?MAXBUF);
????????exit(0);
????}
????/*SSL初始化*/
????SSL_library_init();
????OpenSSL_add_all_algorithms();
????SSL_load_error_strings();
????ctx?=?SSL_CTX_new(SSLv3_client_method());
????if?((sockfd?=?socket(AF_INET?SOCK_STREAM?0))?0)?{
????????perror(“Socket“);
????????exit(errno);
????}
????bzero(&dest?sizeof(dest));
????dest.sin_family?=?AF_INET;
????dest.sin_port?=?htons(atoi(argv[2]));
????if?(inet_aton(argv[1]?(struct?in_addr?*)?&dest.sin_addr.s_addr)?==?0)?{
????????perror(argv[1]);
????????exit(errno);
????}
????if?(connect(sockfd?(struct?sockaddr?*)?&dest?sizeof(dest))?!=?0)?{
????????perror(“Connect?“);
????????exit(errno);
????}
????printf(“connectd?server?successly\n“);
????ssl?=?SSL_new(ctx);
????SSL_set_fd(ssl?sockfd);
????if?(SSL_connect(ssl)?==?-1)?{
????????ERR_print_errors_fp(stderr);
????}?else?{
????????printf(“Connected?with?%s?encryption\n“?SSL_get_cipher(ssl));
????????ShowCerts(ssl);
????}
????bzero(buffer?MAXBUF?+?1);
????len?=?SSL_read(ssl?buffer?MAXBUF);
????if?(len?>?0)?{
????????printf(“接收消息成功:‘%s‘,共%d個字節的數據\n“?buffer?len);
????}?else?{
????????printf(“消息接收失敗!錯誤代碼是%d,錯誤信息是‘%s‘\n“?errno?strerror(errno));
????????goto?finish;
????}
????bzero(buffer?MAXBUF?+?1);
????strcpy(buffer?“from?client->server“);
????len?=?SSL_write(ssl?buffer?strlen(buffer));
????if?(len?0)?{
????????printf(“消息‘%s‘發送失敗!錯誤代碼是%d,錯誤信息是‘%s‘\n“?buffer?errno?strerror(errno));
????}?else?{
????????printf(“消息‘%s‘發送成功,共發送了%d個字節!\n“?buffer?len);
????}
finish:
????SSL_shutdown(ssl);
????SSL_free(ssl);
????close(sockfd);
????SSL_CTX_free(ctx);
????return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????2794??2017-12-01?16:34??client.c
?????文件????????4671??2017-12-01?16:34??client1.c
?????文件????????3140??2017-12-01?16:32??des3.c
?????文件????????4000??2017-12-01?16:32??rsa.c
?????文件????????3603??2017-12-01?16:33??server.c
?????文件????????4594??2017-12-01?16:33??server1.c
- 上一篇:第三方串口類
- 下一篇:兩串口通訊C語言源代碼
評論
共有 條評論