pythonsalt
利用saltstacksalt.client模塊python命令行或者python腳本執行相應salt命令
master端想要執行類似 salt '*' cmd.run 'uptime' saltclient寫
importsalt.client
local=salt.client.LocalClient()
local.cmd('*','cmd.run',['uptime'])
放台執行返jid
cmd_async('*','cmd.run',['uptime'])
2. 如何使用Python 3的兩個庫來加解密字元串
哈希
如果需要用到安全哈希演算法或是消息摘要演算法,那麼你可以使用標准庫中的 hashlib 模塊。這個模塊包含了符合 FIPS(美國聯邦信息處理標准)的安全哈希演算法,包括 SHA1,SHA224,SHA256,SHA384,SHA512 以及 RSA 的 MD5 演算法。Python 也支持 adler32 以及 crc32 哈希函數,不過它們在 zlib 模塊中。
哈希的一個最常見的用法是,存儲密碼的哈希值而非密碼本身。當然了,使用的哈希函數需要穩健一點,否則容易被破解。另一個常見的用法是,計算一個文件的哈希值,然後將這個文件和它的哈希值分別發送。接收到文件的人可以計算文件的哈希值,檢驗是否與接受到的哈希值相符。如果兩者相符,就說明文件在傳送的過程中未經篡改。
讓我們試著創建一個 md5 哈希:
>>> import hashlib >>> md5 = hashlib.md5() >>> md5.update('Python rocks!') Traceback (most recent call last): File "<pyshell#5>", line 1, in <mole> md5.update('Python rocks!') TypeError: Unicode-objects must be encoded before hashing >>> md5.update(b'Python rocks!') >>> md5.digest() b'\x14\x82\xec\x1b#d\xf6N}\x16*+[\x16\xf4w'
讓我們花點時間一行一行來講解。首先,我們導入 hashlib ,然後創建一個 md5 哈希對象的實例。接著,我們向這個實例中添加一個字元串後,卻得到了報錯信息。原來,計算 md5 哈希時,需要使用位元組形式的字元串而非普通字元串。正確添加字元串後,我們調用它的 digest 函數來得到哈希值。如果你想要十六進制的哈希值,也可以用以下方法:
>>> md5.hexdigest() ''
實際上,有一種精簡的方法來創建哈希,下面我們看一下用這種方法創建一個 sha1 哈希:
>>> sha = hashlib.sha1(b'Hello Python').hexdigest() >>> sha ''
可以看到,我們可以同時創建一個哈希實例並且調用其 digest 函數。然後,我們列印出這個哈希值看一下。這里我使用 sha1 哈希函數作為例子,但它不是特別安全,讀者可以隨意嘗試其他的哈希函數。
密鑰導出
Python 的標准庫對密鑰導出支持較弱。實際上,hashlib 函數庫提供的唯一方法就是 pbkdf2_hmac 函數。它是 PKCS#5 的基於口令的第二個密鑰導出函數,並使用 HMAC 作為偽隨機函數。因為它支持「加鹽(salt)」和迭代操作,你可以使用類似的方法來哈希你的密碼。例如,如果你打算使用 SHA-256 加密方法,你將需要至少 16 個位元組的「鹽」,以及最少 100000 次的迭代操作。
簡單來說,「鹽」就是隨機的數據,被用來加入到哈希的過程中,以加大破解的難度。這基本可以保護你的密碼免受字典和彩虹表(rainbow table)的攻擊。
讓我們看一個簡單的例子:
>>> import binascii >>> dk = hashlib.pbkdf2_hmac(hash_name='sha256', password=b'bad_password34', salt=b'bad_salt', iterations=100000) >>> binascii.hexlify(dk) b''
這里,我們用 SHA256 對一個密碼進行哈希,使用了一個糟糕的鹽,但經過了 100000 次迭代操作。當然,SHA 實際上並不被推薦用來創建密碼的密鑰。你應該使用類似 scrypt 的演算法來替代。另一個不錯的選擇是使用一個叫 bcrypt 的第三方庫,它是被專門設計出來哈希密碼的。
3. python都能幹什麼
python主要可以做Web 和 Internet開發、科學計算和統計、桌面界面開發、軟體開發、後端開發等領域的工作。
Python是一種解釋型腳本語言。Python可以應用於眾多領域,如:數據分析、組件集成、網路服務、圖像處理、數值計算和科學計算等眾多領域。互聯網公司廣泛使用Python來做的事一般有:自動化運維、自動化測試、大數據分析、爬蟲、Web 等。
(3)pythonsalt擴展閱讀
python的主要優點:
簡單易學:Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣。它使你能夠專注於解決問題而不是去搞明白語言本身。因有極其簡單的說明文檔,Python極其容易上手。
運行速度快:Python 的底層是用 C 語言寫的,很多標准庫和第三方庫也都是用 C 寫的,運行速度非常快。
免費、開源資源:Python是FLOSS(自由/開放源碼軟體)之一。使用者可以自由地發布這個軟體的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用於新的自由軟體中。FLOSS是基於一個團體分享知識的概念。
可擴展性:如果需要一段關鍵代碼運行得更快或者希望某些演算法不公開,可以部分程序用C或C++編寫,然後在Python程序中使用它們。
4. python腳本中怎麼運行saltstack命令
利用saltstack的salt.client模塊可以在python的命令行下或者python腳本里執行相應的salt命令
master端想要執行類似 salt '*' cmd.run 'uptime' 在saltclient里可以這么寫
importsalt.client
local=salt.client.LocalClient()
local.cmd('*','cmd.run',['uptime'])
也可以放到後台執行只返回一個jid
cmd_async('*','cmd.run',['uptime'])
得到jid可以通過get_cache_returns(jid)方法來獲取執行結果,在沒有執行完成以前是為空的所以可以寫一個while來一直讀取結果直到讀取到或者超出規定時間為止
importsalt.client
local=salt.client.LocalClient()
t=0
5. python 簡單爬蟲問題
可能是你請求數據錯誤
現在的數據不是這樣么
您需要向該地址網頁鏈接
通過POST或GET方法發送下列欄位來訪問服務
欄位名 類型 必填參數 描述 備注
q TEXT Y 請求翻譯query UTF-8編碼
from TEXT Y 翻譯源語言 語言列表(可設置為auto)
to TEXT Y 譯文語言 語言列表(不可設置為auto)
appid INT Y APP ID 可在管理控制台查看
salt INT Y 隨機數
sign TEXT Y 簽名 appid+q+salt+密鑰 的MD5值
6. Python有哪些好用的語言翻譯方法
1 import re
2 import urllib.parse, urllib.request
3 import hashlib
4 import urllib
5 import random
6 import json
7 import time
8 from translate import Translator
非python自帶的庫,如python google translator,需要手動安裝,命令pip install mole_name。
1. 網路翻譯
1 appid = 'your_appid'
2 secretKey = 'your_secretKey'
3 url_ = 'http://api.fanyi..com/api/trans/vip/translate'
4
5 def translateBai(text, f='ja', t='zh'):
6 salt = random.randint(32768, 65536)
7 sign = appid + text + str(salt) + secretKey
8 sign = hashlib.md5(sign.encode()).hexdigest()
9 url = url_ + '?appid=' + appid + '&q=' + urllib.parse.quote(text) + '&from=' + f + '&to=' + t + \
10 '&salt=' + str(salt) + '&sign=' + sign
11 response = urllib.request.urlopen(url)
12 content = response.read().decode('utf-8')
13 data = json.loads(content)
14 result = str(data['trans_result'][0]['dst'])
15 print(result)
參數:text--待翻文本,f--初始語言,t--目標語言,後面方法類似。
2. 有道翻譯
1 url_you = 'http://fanyi.you.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=' \
2 'http://www.you.com/'
3 dict = {}
4 dict['type'] = 'AUTO'
5 dict['doctype'] = 'json'
6 dict['xmlVersion'] = '1.8'
7 dict['keyfrom'] = 'fanyi.web'
8 dict['ue'] = 'UTF-8'
9 dict['action'] = 'FY_BY_CLICKBUTTON'
10 dict['typoResult'] = 'true'
11
12 def translateYou(text):
13 global dict
14 dict['i'] = text
15 data = urllib.parse.urlencode(dict).encode('utf-8')
16 response = urllib.request.urlopen(url_you, data)
17 content = response.read().decode('utf-8')
18 data = json.loads(content)
19 result = data['translateResult'][0][0]['tgt']
20 print(result)
參數主要由字典dict指定,發現沒有地方可以指定語言(可能是我沒找到),測試結果是不管輸入什麼語言的文本,輸出均是中文。
3. 谷歌翻譯
1 url_google = 'http://translate.google.cn'
2 reg_text = re.compile(r'(?<=TRANSLATED_TEXT=).*?;')
3 user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' \
4 r'Chrome/44.0.2403.157 Safari/537.36'
5
6 def translateGoogle(text, f='ja', t='zh-cn'):
7 values = {'hl': 'zh-cn', 'ie': 'utf-8', 'text': text, 'langpair': '%s|%s' % (f, t)}
8 value = urllib.parse.urlencode(values)
9 req = urllib.request.Request(url_google + '?' + value)
10 req.add_header('User-Agent', user_agent)
11 response = urllib.request.urlopen(req)
12 content = response.read().decode('utf-8')
13 data = reg_text.search(content)
14 result = data.group(0).strip(';').strip('\'')
15 print(result)
和上面兩種方法一樣,採用的是訪問網頁的形式來進行翻譯。
還有一種是利用python谷歌翻譯模塊Translator:
1 def translateGoogle2(text):
2 result = translator.translate(text)
3 print(result)
4. 測試代碼
測試過程:
翻譯5個字串為一個小的單位,輸出消耗時間;
循環10次為一個大的單位,輸出消耗時間;
對不同的語言字串和循環次數做過多次測試,發現情況基本類似,所以這里選擇了10次。
1 text_list = ['こんにちは', 'こんばんは', 'おはようございます', 'お休(やす)みなさい', 'お元気(げんき)ですか']
2
3 time_ = 0
4 time_you = 0
5 time_google = 0
6 time_google2 = 0
7
8 for i in list(range(1, 11)):
9 time1 = time.time()
10 for text in text_list:
11 translateBai(text)
12 time2 = time.time()
13 print('網路翻譯第%s次時間:%s' % (i, time2 - time1))
14 time_ += (time2 - time1)
15
16 time1 = time.time()
17 for text in text_list:
18 translateYou(text)
19 time2 = time.time()
20 print('有道翻譯第%s次時間:%s' % (i, time2 - time1))
21 time_you += (time2 - time1)
22
23 time1 = time.time()
24 for text in text_list:
25 translateGoogle(text)
26 time2 = time.time()
27 print('谷歌翻譯第%s次時間:%s' % (i, time2 - time1))
28 time_google += (time2 - time1)
29
30 time1 = time.time()
31 for text in text_list:
32 translateGoogle2(text)
33 time2 = time.time()
34 print('谷歌2翻譯第%s次時間:%s' % (i, time2 - time1))
35 time_google2 += (time2 - time1)
36
37
38 print('網路翻譯時間:%s' % (time_ / 10))
39 print('有道翻譯時間:%s' % (time_you / 10))
40 print('谷歌翻譯時間:%s' % (time_google / 10))
41 print('谷歌2翻譯時間:%s' % (time_google2 / 10))
7. Python生成8位隨機字元串的方法分析
Python生成8位隨機字元串的方法分析
篇文章主要介紹了Python生成8位隨機字元串的方法,結合實例形式對比分析了2種比較常用的隨機字元串生成技巧,具有一定參考借鑒價值,需要的朋友可以參考下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
import string
#第一種方法
seed = "!@#$%^&*()_+=-"
sa = []
for i in range(8):
sa.append(random.choice(seed))
salt = '.join(sa)
print salt
#運行結果:l7VSbNEG
#第二種方法
salt = '.join(random.sample(string.ascii_letters + string.digits, 8))
print salt
#運行結果:VOuCtHZs
生成隨機字元串
在加密用戶密碼的時候,一個好方法就是產生一個隨機字元串,然後再和密碼進行混合求摘要。產生隨機字元串的方法找到了這些。
第一種比較簡單,易於理解
第二種不好理解,但很簡潔
本來我只想隨機取四個數字的,用的random.randint(1000,9999)。但是這個開頭不會出現0,有點不爽,後來找到這個文章。
8. centos6.3 安裝salt 支持python2.7.8版本嗎
需要Python2.7以上的版本:
Python升級方法:
當系統版本低於(Centos7.0)時,Python版本是2.7以下時,要升級Python到2.7
1.下載python2.7.x
wget https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz
2.解壓並編譯安裝
tar -zxvf Python-2.7.6.tgz && cd Python-2.7.6 && ./configure --prefix=/usr/local/bin/ && make all && make install && make clean && make distclean
3.檢查安裝
/usr/local/bin/python2.7 -V
4.建立軟連接,使用系統默認的python指向
mv /usr/bin/python /usr/bin/python2.6.6
ln -s /usr/local/bin/python2.7 /usr/bin/python
5.檢查
python -V
6.用yum需注意
解決系統 Python 軟鏈接指向 Python2.7 版本後,因為yum是不兼容 Python 2.7的,所以yum不能正常工作,我們需要指定 yum 的Python版本
vim /usr/bin/yum
將頭部#!/usr/bin/python 改成#!/usr/bin/python2.6.6(剛剛備份的)
9. 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
10. 如何用python調用百度翻譯
#/usr/bin/envpython
#coding=utf8
importhttplib
importmd5
importurllib
importrandom
appid='20151113000005349'
secretKey='osubCEzlGjzvw8qdQc41'
httpClient=None
myurl='/api/trans/vip/translate'
q='apple'
fromLang='en'
toLang='zh'
salt=random.randint(32768,65536)
sign=appid+q+str(salt)+secretKey
m1=md5.new()
m1.update(sign)
sign=m1.hexdigest()
myurl=myurl+'?appid='+appid+'&q='+urllib.quote(q)+'&from='+fromLang+'&to='+toLang+'&salt='+str(salt)+'&sign='+sign
try:
httpClient=httplib.HTTPConnection('api.fanyi..com')
httpClient.request('GET',myurl)
#response是HTTPResponse對象
response=httpClient.getresponse()
printresponse.read()
exceptException,e:
printe
finally:
ifhttpClient:
httpClient.close()
在調用網路翻譯api之前,您需要申請開發者許可權,獲取APP ID及密鑰。 一個賬號只能獲得一個APP ID和密鑰。
參考價格:若當月翻譯字元數≤2百萬,免費;若超過2百萬字元,按照49元/百萬字元支付當月全部翻譯字元數費用。
參考http://api.fanyi..com/api/trans/proct/apidoc