数字签名的原理

数字签名的原理

转自:

http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

今天,我读到一篇好文章

它用图片通俗易懂地解释了,"数字签名"(digital signature)和"数字证书"(digital certificate)到底是什么。

我对这些问题的理解,一直是模模糊糊的,很多细节搞不清楚。读完这篇文章后,发现思路一下子就理清了。为了加深记忆,我把文字和图片都翻译出来了。

继续阅读

Posted in 网络安全 | Leave a comment

非对称算法原理解析 – RSA 2

非对称算法原理解析 – RSA 2

非对称算法原理解析 – RSA 2

有了这些知识,我们就可以看懂RSA算法。这是目前地球上最重要的加密算法。

六、密钥生成的步骤

我们通过一个例子,来理解RSA算法。假设爱丽丝要与鲍勃进行加密通信,她该怎么生成公钥和私钥呢?

继续阅读

Posted in 网络安全 | Leave a comment

非对称算法原理解析 – RSA 1

rsa-1

非对称算法原理解析 – RSA 1

本文转载自:

阮一峰的网络日志

如果你问我,哪一种算法最重要?

我可能会回答"公钥加密算法"

因为它是计算机通信安全的基石,保证了加密数据不会被破解。你可以想象一下,信用卡交易被破解的后果。

继续阅读

Posted in 网络安全 | Leave a comment

非对称算法 RSA DH 还有ECDH

非对称算法 RSA DH 还有ECDH

  虽然对称算法的效率高,但是密钥的传输需要另外的信道。非对称算法RSA和DH可以解决密钥的传输问题(当然,它们的作用不限于此)。这两个算 法的名字都是来自于算法作者的缩写,希望有朝一日能够出现用中国人命名的加密算法。非对称算法的根本原理就是单向函数,f(a)=b,但是用b很难得到 a。   RSA算法   RSA算法是基于大数难于分解的原理。不但可以用于认证,也可以用于密钥传输。那么用户A和B如何利用RSA算法来传输密钥呢? 1:A产生一个密钥K,用B的公钥加密K,然后将得到的密文发送给B。 2:B用自己的私钥解密收到的密钥,就可以得到密钥。  (感谢网友的提醒,已经修改了) DH算法   DH算法的出现就是用来进行密钥传输的。DH算法是基于离散对数实现的。用户A和B如何利用RSA算法来传输密钥? 在通信前,用户A和B双方约定2个大整数n和g,其中1,这两个整数可以公开 1)   A随机产生一个大整数a,然后计算Ka=ga mod n。(a需要保密) 2)   B随机产生一个大整数b,然后计算Kb=gb mod n。(b需要保密) 3)   A把Ka发送给B,B把Kb发送给A 4)   A计算K=Kba mod n 5)   B计算K=Kab mod n 由于Kba mod n= (gb mod n)a mod n= (ga mod n)b mod n,因此可以保证双方得到的K是相同的,K即是共享的密钥。     ECDH算法 ECC 算法用途比RSA还猛,不仅可以加解密、签名验证。还可以与DH结合使用,用于密钥磋商,这个密钥交换算法称为ECDH。交换双方可以在不共享任何秘密的 情况下协商出一个密钥。ECC是建立在基于椭圆曲线的离散对数问题上的密码体制,给定椭圆曲线上的一个点P,一个整数k,求解Q=kP很容易;给定一个点 P、Q,知道Q=kP,求整数k确是一个难题。ECDH即建立在此数学难题之上。密钥磋商过程:

       假设密钥交换双方为Alice、Bob,其有共享曲线参数(椭圆曲线E、阶N、基点G)。

1) Alice生成随机整数a,计算A=a*G。Bob生成随机整数b,计算B=b*G。

2) Alice将A传递给Bob。A的传递可以公开,即攻击者可以获取A。由于椭圆曲线的离散对数问题是难题,所以攻击者不可以通过A、G计算出a。Bob将B传递给Alice。同理,B的传递可以公开。

继续阅读

Posted in 网络安全 | Leave a comment

python完成自动提交form的功能

python完成自动提交form的功能

记得刚毕业的那会儿,参加工作的第一家公司,每天下班都要通过内部系统(web)打卡的,当时觉得很麻烦所以就做了一个系统自动完成,但是使用c++调用IE访问打卡系统的网页,然后通过,鼠标移动到指定的坐标,然后在发送鼠标点击动作。这种方式很不灵活,因为一定不能让被调用IE失去焦点。也就是这个过程中电脑最好不要被动到。

今天发现了一个python的库,可以很轻松的完成这个功能,并且还能你解决我上面提到的这个问题。这个库的名字就是selenium,这个英文单词的意思是硒,是个化学元素的名字。

官方网站:

http://www.seleniumhq.org/

selenium支持的语言不只有python,还有

  • java
  • c#
  • Ruby
  • python
  • Javascript(Node)

可以在官方网站下载最新的版本,也可以使用pip提供的版本,如果使用pip提供的版本,那么先通过pip安装它

$ sudo pip install selenium

关于如何使用selenium,请参看

http://selenium-python.readthedocs.io/

下面是这个网站给出的一个简单的例子

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()

继续阅读

Posted in Python, Web | Leave a comment

使Python程序的窗口不要显示出来

使Python程序的窗口不要显示出来

这个标题不是很贴切,一时半会儿想不到更好的,就先用这个。为了更好的说明这个标题要说的事情,这里我们举个例子吧,例如利用python和firefox来完成一个周期性检测一个订票系统,那么你要它一会儿调用firefox,一会儿关掉,如果这个电脑是你正在用,那么这种方式会让影响你,那么我们就想到把不要这个窗口显示出来,而是所有的工作都在后台进行。这个怎么做到呢?我们需要2个东西

  1.  Xvfb
  2.  pyvirtualdisplay

先安装他们:

$ sudo yum install -y Svfb

$ sudo pip install pyvirtualdisplay

接下面我们测试一下:

#!/usr/bin/env python

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(800, 600))
display.start()

# now Firefox will run in a virtual display. 
# you will not see the browser.
browser = webdriver.Firefox()
browser.get('http://www.google.com')
print browser.title
browser.quit()

display.stop()

继续阅读

Posted in Python, Web | Leave a comment

I Do 吉他谱

I Do 吉他谱

Capo 4
  
   G              Bm                           Em
1. My whole world changed from the moment I met you
             C            G
And it would never be the same
                 Bm                   Em
Felt like I knew that I'd always love you
         C                   G
From the moment I heard your name.
              Bm                            Em
Everything was perfect, I knew this love is worth it
        C               G
Our own micracle in the makin'
              Bm
‘Til the world stops turning
                  Em                      C                  G
I'll still be here waiting and waiting to make that vow that I'll.


Chorus:
Em              Bm                  Em
I'll be by your side, ‘til the day I die
                    C              G
I'll be waiting ‘til hear you say I Do
                        Bm
Something old, something new
                              Em
Something borrowed, something blue
                     C               G
I'll be waiting ‘til I hear you say I Do.
   

    G            Bm                            Em
2. Smiles by the thousands, ya tears have all dried out
            C          G
‘Cos I won't see you cry again
                     Bm                               Em
Throw pennies in the fountain, and look at what comes out
          C              G
Sometimes wishes do come true.
              Bm                            Em
Everything was perfect, I knew this love is worth it
        C               G
Our own micracle in the makin'
              Bm
‘Til the world stops turning
                  Em                      C                  G
I'll still be here waiting and waiting to make that vow that I'll.


Chorus

Bridge:
                                              Em
Always better than worse, protect you from the hurt
                    C             G
I'll be waiting ‘til hear you say I Do
         Bm                 Em
I Do love you, yes I Do love you
                    C             G
I'll be waiting ‘til hear you say I Do
          Bm         Em
Coz I love you, love you.

Chorus

* We're shining lie a diamond, just look at us now

I wanna hear you say I Do.

继续阅读

Posted in 音乐 | Leave a comment

VIM的自动补全

VIM的自动补全

VIM是linux下面我最喜欢的代码编写工具,今天就说它的自动补全功能。

Vim自身不具有自动补全功能的,需要额外的插件来完成,需要手动的按住 ctrl+P才能给出提示,但是每次多按一下,然后再通过上下键选择,最后回车,效率不高。这里推荐一款自动补全的插件

YouCompletMe

可以自动提示匹配的内容,然后tab键选择,和Windows下面的VisualStudio的助手非常像。

不过YouCompletMe的安装真是有点复杂。Vim的大部分的插件都是直接从官网下载,然后将对应的文件拷贝到

~/.vim/plugins

就可以了。但是YouCompletMe需要先安装

Vundle

这是个管理vim插件的插件。

设置编译环境,然后编译。如果自己下载YouCompletme的源代码,然后编译,是不能工作的,或者需要额外更多的步骤,反正我是没有成功了。

安装Vundle,这个比较简单直接vim的插件官网:

https://github.com/VundleVim/Vundle.vim

可以看到推荐的安装方法:

$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.
" plugin on GitHub repo
Plugin 'tpope/vim-fugitive'
" plugin from http://vim-scripts.org/vim/scripts.html

Plugin 'Valloric/YouCompleteMe'

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required

继续阅读

Posted in VIM | Leave a comment

ffmpeg Provided packet is too small, needs to be

ffmpeg Provided packet is too small, needs to be

我们在调用

avcodec_encode_xxxx

的时候,会出现上面的错误,原因是没有初始化

AVPacket

例如:

ret = avcodec_encode_audio2( pEncCodecCtx, &encPkt, encFrame, &got_output);

也就是说encPkt没有初始化,ffmpeg为初始化提供了一个api

继续阅读

Posted in FFMpeg | Leave a comment

操作firewalld

操作firewalld

前面已有文章大概介绍了firewalld,这个Centos 7新引入的组件,

Centos7引入了新的防火墙firewalld, iptables被取代

启动,停止,或者查看状态,使用service或者centos 7新引入的systemd

$> sudo service firewalld [start|stop|restart|status]

$> sudo systemd [start|stop|restart|status] firewalld

除了使用service或者systemd的status选型来查看状态,还可以firewall-cmd

$> firewall-cmd –state

running

会直接告诉你firewalld是否运行,

firewalld引入2个重要的概念,zone(域)和service(服务),zone是来一些列规则的集合,service表示了这些规则中一条。zone有默认的zone。这些概念有些复杂,这里我们暂且不去讨论这些概念,看看如何简单添加我们需要的端口,例如我们要添加tcp的8080端口

$> sudo firewall-cmd --zone=public --add-port=8080/tcp

success

上面命令就有个zone,名字是public,这个firewalld初始就有的zone,并且是默认的域。下面查看我们刚才添加的端口是否成功:

$> firewall-cmd --list-ports
8080/tcp

可以看到8080已经添加成功。

下面我们添加udp的端口,下面是端口范围,当然udp可以换成tcp

$> sudo firewall-cmd --zone=public --add-port=8000-8010/udp

下面再查看添加的端口:

$> firewall-cmd --list-ports

8000-8010/udp 8080/tcp

上面的添加都是零时的,系统重启后,都将消失,为了永久添加,使用 permanent参数,例如:

$> sudo firewall-cmd --zone=public --permanent --add-port=8000/tcp

下面简单提一下zone

列出所有的zone

firewall-cmd --list-all-zones | less

继续阅读

Posted in Linux系统学习 | Leave a comment