1. c語言中,crypt函數是在哪個庫裡面
先頂樓上,功能強大這個代碼是不是一個有用的。事實上,只有在沒有定義的函數的頭文件中的函數聲明。這個頭文件是為程序員看,讓你知道這些功能。在它的真正功能定義?事實上,庫函數早已編好的中存在。 OBJ文件或。裡面的lib文件。這種連接方式是靜態的。之後,該過程完成,您的接頭那麼你的程序。 obj文件和庫連接的最後一代。 exe文件。如果你想看到一個庫文件的定義,那麼只有去網上尋找它自己。但我個人覺得沒有必要。事實上,大多數圖書館都能夠寫自己的。喜歡的strcmp()這個微軟的庫文件發布的原碼是更不可能的,但你可以去MSDN裡面的運氣。最後,祝你好運啦。
2. 哪位大俠有python版本的3DES(雙倍長32位密鑰)的加解密演算法源碼幫忙提供一
#if !defined(_CRYPT3DES_H) #define _CRYPT3DES_H #if !defined(ED_FLAG) #define ED_FLAG #define encrypt 0 #define decrypt 1 #endif #ifndef _WINDOWS_ #include "windows.h" #endif
3. python crypt怎麼導入
python crypt怎麼導入
不是說python不支持sha,說的是crypt。。。。
附一段測試代碼
import crypt
print crypt.crypt("123456","$6$abcdabcd")
在mac下生成的貌似是des
在ubuntu下生成的是帶鹽值由$隔開的sha512
4. 在Linux下生成crypt加密密碼的方法
我們可以用mkpasswd命令:這個命令就是用來生成crypt格式的密碼的:
mkpasswd
輸入命令後,程序會要求輸入一個密碼,然後生成crypt格式的字元串。
如果用Apache
Web伺服器,那麼也可以用htpasswd:
htpasswd
-nd
user
用戶名(user)叫什麼都無所謂,我們關注的是密碼。這個命令會輸出一個user:password格式的字元串,直接把password欄位復制下來就ok了。
有OpenSSL的話,可以使用openssl命令:
openssl
passwd
-crypt
myPassword
把上面命令中的myPassword用你想用的密碼字元串代替。
其他還有一些需要把命令在命令行中直接輸入的方式,不過這種做法有個問題,就是在ps命令中可以看到密碼,同時密碼也會被記錄入shell歷史。
不過這個問題是有解決辦法的:用腳本,或者語言解釋器。
比如使用Perl:
perl
-e
"print
crypt('password','sa');"
Perl需要一個加密鹽,如這里使用了sa(salt指加密中用到的隨機字元串,用不同的salt可以生成不同的加密結果)。
Ruby也一樣需要加密鹽:
ruby
-e
'print
"password".crypt("JU");
print("n");'
php也可以:
php
-r
"print(crypt('password','JU')
.
"n");"
需要注意的是,如果不使用加密鹽(如上面命令中的JU),那麼輸出的字元串將不是crypt加密格式,而是MD5加密格式的。所以,加密鹽其實是必須的參數。
Python需要導入crypt庫並使用加密鹽:
python
-c
'import
crypt;
print
crypt.crypt("password","Fx")'
這里的加密鹽是Fx。
資料庫也可以生成crypt密碼。比如用MySQL:
echo
"select
encrypt('password');"
|
mysql
另外,Tcl,Ubuntu下的trf,還有Lua的lua-crypt插件也可以實現相同的目的。
歡迎補充其他的方式!
5. python hashlib.sha512 為什麼加密結果和shadow不一樣
python的話直接使用crypt就行計算的時候要加上salt值。
cat /etc/shadow | greb root
得到密文。密文由3部分組成,以」$」分隔,第一部分為ID,第二部分為鹽值,第三部分為加密密文
密文示例:
$6$D0xsORq3b7GGsbYv$7L8myKFcJf1FqnvtzD.Zcbx9PeHnwGH1YJm/
$id$salt$encrypted
採用方法鹽值加密密文
$6$D0xsORq3b7GGsbYv #這一段就是鹽值,在加密的時候連同前面的ID一起加密
importcrypt
printcrypt.crpyt("password","$6$D0xsORq3b7GGsbYv")
就可以得到shadow中的密文了。
其實shadow中的密文並不是直接由sha512得出的,還有一些其他操作,例如使用base64加密了salt和hash,可以看下這里man page
6. 如何為mac python安裝pycrypto
解決方案一:安裝Vs2008(實測)
完全的無腦流,安裝完問題直接解決。
解決方案二:安裝Vs2010(未測試)
上次在電腦上裝個Vs2010並不能像 vs2008那樣直接解決問題,從網上找到如下解決方案,不知是否可行。
打開「<python安裝目錄>\Lib\distutils\msvc9compiler.py」
找到 toolskey = 「VS%0.f0COMNTOOLS」 % version,直接修改為 toolskey = 」VS100COMNTOOLS」
解決方案三:安裝MinGW(實測)
1、下載安裝MinGW,下載地址為:http://sourceforge.net/projects/mingw/files/latest/download?source=files
2、在MinGW的安裝目錄下找到bin文件夾,找到mingw32-make.exe,復制一份更名為make.exe
3、把MinGW的路徑添加到環境變數path中,比如我把MinGW安裝到D:\MinGW\中,就把D:\MinGW\bin添加到path中;
4、在<python安裝目錄>\distutils增加文件distutils.cfg,在文件里輸入
[build]
compiler=mingw32
保存;
5、執行原先的模塊安裝,發現還是報錯,報錯內容為:error: command 』gcc』 failed: No such file or directory 解決方案是將D:\MinGW\lib再添加到PATH中。
6、如果安裝過程中出現 error: Could not find 『openssl.exe』 則直接到http://pypi.python.org/pypi/pyOpenSSL/0.13 下載安裝即可。
再次執行時安裝模塊時,發現如下錯誤:
D:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall 「-ID:\Program Files\Python27\inc
lude」 「-ID:\Program Files\Python27\include」 「-ID:\Program Files\Python27\PC」 -c
../libdasm.c -o build\temp.win32-2.7\Release\..\libdasm.o
cc1.exe: error:unrecognized command line option 『-mno-cygwin』
error: command 『gcc』 failed with exit status 1
原因是gcc 4.6.x 以後不再接受-mno-cygwin為了解決這個問題需要修改<python安裝目錄>\distutils\cygwinccompiler.py文件。找到:
self.set_executables(compiler='gcc -mno-cygwin -O -Wall',
compiler_so='gcc -mno-cygwin -mdll -O -Wall',
compiler_cxx='g++ -mno-cygwin -O -Wall',
linker_exe='gcc',
linker_so='%s -mno-cygwin %s %s'
% (self.linker_dll, shared_option,
entry_point))
修改為:
self.set_executables(compiler='gcc -O -Wall',
compiler_so='gcc -mdll -O -Wall',
compiler_cxx='g++ -mno-cygwin -O -Wall',
linker_exe='gcc',
linker_so='%s -mno-cygwin %s %s'
% (self.linker_dll, shared_option,
entry_point))
講了三個解決方案,安裝visualstudio太龐大的,沒有試,於是就嘗試第三種方法。其中openssl.exe的錯誤沒有碰到,應該是已經有了,而distutils.cfg文件的目錄在python2.7下面有點不一樣,在Python27\Lib\distutils下面。一直到最後個修改項,最終錯誤是:
error: expected 『=』, 『,』, 『;』, 『asm』 or 『__attribute__』 before 『PyInt_AsUnsignedLongLongMask』
沒有解決。
中間有個警告,在cygwin中使用dos style的path,設置path CYGWIN=nodosfilewarning 來規避
cygwin warning:
MS-DOS style path detected: C:\cygwin\home\ADMINI~1\hadoop\/build/native
Preferred POSIX equivalent is: /home/ADMINI~1/hadoop/build/native
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
12/02/13 10:34:53 INFO namenode.NameNode: STARTUP_MSG:
python setup.py install build --compiler=mingw32
這個命令嘗試也不行。
在這個url:http://stackoverflow.com/questions/1687283/why-cant-i-just-install-the-pycrypto,國際友人介紹用PyPM來安裝,由於要另外安裝工具,沒有嘗試:
You may use PyPM to install (pre-built binary package of) pycrypto:
C:> pypm install pycrypto
Ready to perform these actions:
The following packages will be installed:
pycrypto-2.0.1
Get: [pypm.activestate.com] pycrypto 2.0.1-1
Installing pycrypto-2.0.1
PyPM can be installed by installing ActivePython.http://www.activestate.com/activepython/
後來在這里http://lili-xiang.iteye.com/blog/1796640,看到有預編譯好的版本用來安裝,在地址http://www.voidspace.org.uk/downloads/pycrypto26/pycrypto-2.6.win-amd64-py3.2.exe下載PyCrypto 2.6 for Python 3.2 64bit,隨後安裝成功,可以在Komodo IDE 7中使用了。測試代碼是這里的:http://ddkangfu.blog.51cto.com/311989/484801
但是例子的代碼是跑不起來的,因為aes加密中,cbc模式下是還有個iv參數的,修改成這樣
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Crypto.Cipher import AES
PADDING = '\0'
pad_it = lambda s: s+(16 - len(s)%16)*PADDING
if __name__ == "__main__":
key = '1234567890123456'
data = 'qwertyuiopasdfgh'
obj = AES.new(key, AES.MODE_CBC, data)
#obj = AES.new(key, AES.MODE_ECB)
crypt = obj.encrypt(data)
print crypt
#obj2 = AES.new(key, AES.MODE_ECB)
obj2 = AES.new(key, AES.MODE_CBC, data)
recovery = obj2.decrypt(crypt)
print recovery
才可以正常運行,如果使用ECB模式,就不用最後一個iv參數的。這里使用加密源data作為iv參數是沒有意思的,正式使用的時候肯定會另外定義的字元串,記得iv長度要是16位的倍數。代碼里還要注意obj2,不能重復使用第一個obj,在加密過程中obj已經改變了,如果不充生成obj2,是無法解密成功的。
7. python 中 crypto 的aes加密怎麼使用
在剛開始知道這個模塊的時候,連基本的Crypto模塊的安裝都花了很多很多時間來搞,也不知道什麼情況反正是折騰很久了才安裝起的,記得是包安裝起來了,但使用的時候始終提示找不到Crypto.Cipher模塊。然後怎麼解決的呢?
一、把我的python換成了64位的,本來電腦就是64位的也不知道之前是啥情況安裝成32位的了。(O(∩_∩)O哈哈~)
二、安裝了VCForPython27.msi
三、在cmd中執行:
pip install pycrypto -i http://mirrors.aliyun.com/pypi/simple/1
經過上邊兒的幾個步驟,我是能夠成功執行
from Crypto.Cipher import AES1
現在上一個實例代碼:
# !/usr/bin/env python
# coding: utf-8
'''
'''
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
class MyCrypt():
def __init__(self, key):
self.key = key
self.mode = AES.MODE_CBC
def myencrypt(self, text):
length = 16
count = len(text)
print count
if count < length:
add = length - count
text= text + ('\0' * add)
elif count > length:
add = (length -(count % length))
text= text + ('\0' * add)
# print len(text)
cryptor = AES.new(self.key, self.mode, b'0000000000000000')
self.ciphertext = cryptor.encrypt(text)
return b2a_hex(self.ciphertext)
def mydecrypt(self, text):
cryptor = AES.new(self.key, self.mode, b'0000000000000000')
plain_text = cryptor.decrypt(a2b_hex(text))
return plain_text.rstrip('\0')
if __name__ == '__main__':
mycrypt = MyCrypt('abcdefghjklmnopq')
e = mycrypt.myencrypt('hello,world!')
d = mycrypt.mydecrypt(e)
print e
print d
0414243
在cmd中執行結果:
8. python的pycrypt不能用公鑰解密么
from Crypto.PublicKey import RSA
text="hello,adoo"
key=RSA.generate(1024)
pubkey=key.publickey()
cipher_text=key.encrypt(text,"long")
plain_text=pubkey.decrypt(cipher_text)
print plain_text
以上代碼,會顯示一個「NO private key」的錯誤,但如果我用私鑰加密,又用私鑰解密的話是可以的,用公鑰加密,用私鑰解密也可以。
而如果我不加密數據,只是用私鑰來給一個數據簽名,然後用公鑰來驗證,是可以驗證成功的。
9. python crypt模塊導入出錯
python crypt模塊導入的話需要是下載成為py文件,然後再進行導入的,不能是直接導入的,不然會出錯的