以下代码似乎没有正确读/写二进制形式.它应该读取一个二进制文件,逐位XOR数据并将其写回文件.没有任何语法错误,但数据无法验证,我已通过其他工具测试源数据以确认xor密钥.
更新:根据评论中的反馈,这很可能是由于我正在测试的系统的字节序.
def four_byte_xor(buf, key):
out = ''
for i in range(0,len(buf)/4):
c = struct.unpack("=I", buf[(i*4):(i*4)+4])[0]
c ^= key
out += struct.pack("=I", c)
return out
Run Code Online (Sandbox Code Playgroud)
调用xortools.py:
from xortools import four_byte_xor
in_buf = open('infile.bin','rb').read()
out_buf = open('outfile.bin','wb')
out_buf.write(four_byte_xor(in_buf, 0x01010101))
out_buf.close()
Run Code Online (Sandbox Code Playgroud)
看来我需要读取每个答案的字节数.由于上面的函数操作多个字节,上面的函数如何合并到下面?或者没关系?我需要使用struct吗?
with open("myfile", "rb") as f:
byte = f.read(1)
while byte:
# Do stuff with byte.
byte = f.read(1)
Run Code Online (Sandbox Code Playgroud)
例如,以下文件有4个重复字节,01020304:

使用01020304的密钥对数据进行异或操作,该密钥将原始字节归零:

这是对原始函数的尝试,在这种情况下,05010501的结果是不正确的:

按照此处的说明重新创建我以前错误创建的证书.我现在javax.net.ssl.SSLHandshakeException: no cipher suites in common在服务器和javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure客户端看到的东西已经改变了.而不是错误这个问题
服务器是ClassFileServer.java和相应的客户端SSLSocketClientWithClientAuth.java
关于让两端发挥得很好的任何提示,请注意我使用的是localhost所以我认为密码功能是相同的.
更新:
以下是我用来生成文件的步骤,我可能会混淆密钥和信任库:
在服务器上(本指南后面):
$ keytool -genkey -alias serverkey -keyalg RSA -keypass p@ssw0rd
-storepass p@ssw0rd -keystore keystore.jks
$ keytool -export -alias serverkey -storepass p@ssw0rd -file
server.cer -keystore keystore.jks
$ keytool -import -v -trustcacerts -alias clientkey -file
../client/client.cer -keystore cacerts.jks -keypass p@ssw0rd
-storepass p@ssw0rd
在客户端(通过本指南):
$ keytool -genkey -alias clientkey -keyalg RSA -keypass changeit
-storepass changeit …
一个服务器和相应的客户端支持客户端身份验证,但因为这里要注意:出现SSLHandshakeException:没有密码套件中常见的,没有参考的trustStore,即它们使用默认的trustStore。如何指定 trustStore?
类文件服务器:
private static ServerSocketFactory getServerSocketFactory(String type) {
if (type.equals("TLS")) {
SSLServerSocketFactory ssf = null;
Properties systemProps = System.getProperties();
systemProps.put( "javax.net.ssl.trustStore", "cacerts.jks");
systemProps.put( "javax.net.ssl.trustStorePassword", "p@ssw0rd");
System.setProperties(systemProps);
try {
// set up key manager to do server authentication
SSLContext ctx;
KeyManagerFactory kmf;
KeyStore ks;
char[] passphrase = "p@ssw0rd".toCharArray();
ctx = SSLContext.getInstance("TLS");
kmf = KeyManagerFactory.getInstance("SunX509");
ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("keystore.jks"), passphrase);
kmf.init(ks, passphrase);
ctx.init(kmf.getKeyManagers(), null, null);
ssf = ctx.getServerSocketFactory();
return ssf;
} catch (Exception e) …Run Code Online (Sandbox Code Playgroud) 我正在尝试解析下载的网页的来源,以获取链接列表.单行可以正常工作.这是我到目前为止所尝试的:
这似乎从一些页面名称中省略了部分URL.
$ cat file.html | grep -o -E '\b(([\w-]+://?|domain[.]org)[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))'|sort -ut/ -k3
Run Code Online (Sandbox Code Playgroud)
这将获取所有URL,但我不想包含具有/是锚链接的链接.另外我希望能够指定domain.org/folder/:
$ awk 'BEGIN{
RS="</a>"
IGNORECASE=1
}
{
for(o=1;o<=NF;o++){
if ( $o ~ /href/){
gsub(/.*href=\042/,"",$o)
gsub(/\042.*/,"",$o)
print $(o)
}
}
}' file.html
Run Code Online (Sandbox Code Playgroud) 下面的代码块有效,但我想取消注释filename = os.path.basename(filename),当我这样做时,我无法指定文件名的绝对路径,因为k.set_contents_from_filename将不再引用实际的位置如果未注释,则只有当前工作目录中的文件才能正常工作.如果我不使用filename = os.path.basename(filename),那么文件将上传其路径预先填写.有任何想法吗?
# List files in directory and upload them to bucket
for filename in all_files:
#skip all directory entries which are not a file
if not os.path.isfile(filename):
continue
#filename = os.path.basename(filename)
k = Key(bucket)
k.key = filename
k.set_contents_from_filename(filename, cb=percent_cb, num_cb=10)
Run Code Online (Sandbox Code Playgroud) 我想在文本文件中解析URI/L's中的参数和关键字值.还应包括没有值的参数.Python很好但是我可以使用Perl等其他工具或者也可以使用其他工具来提供建议.
示例来源:
www.domain.com/folder/page.php?date=2012-11-20
www2.domain.edu/folder/folder/page.php?l=user&x=0&id=1&page=http%3A//domain.com/page.html&unique=123456&refer=http%3A//domain2.net/results.aspx%3Fq%3Dbob+test+1.21+some%26file%3Dname&text=
www.domain.edu/some/folder/image.php?l=adm&y=5&id=2&page=http%3A//support.domain.com/downloads/index.asp&unique=12345
blog.news.org/news/calendar.php?view=month&date=2011-12-10
Run Code Online (Sandbox Code Playgroud)
示例输出:
date=2012-11-20
l=user
x=0
page=http%3A//domain.com/page.html&unique=123456
refer=http%3A//domain2.net/results.aspx%3Fq%3Dbob+test+1.21+some%26file%3Dname
test=
l=adm
y=5
id=2
page=http%3A//support.domain.com/downloads/index.asp
unique=12345
view=month
date=2011-12-10
Run Code Online (Sandbox Code Playgroud) 以下内容从表单中获取多个文件输入,并以串行方式写入.虽然当每个文件成功登录页面时它会打印,但每个循环之间没有换行符?解决这个问题的最佳方法是什么?我以为print语句会默认添加换行符?
#!/usr/bin/python
import cgi, os
import shutil
import cgitb; cgitb.enable() # for troubleshooting
form = cgi.FieldStorage()
print """\
Content-Type: text/html\n
<html><body>
"""
if 'file' in form:
filefield = form['file']
if not isinstance(filefield, list):
filefield = [filefield]
for fileitem in filefield:
if fileitem.filename:
fn = os.path.basename(fileitem.filename)
# save file
with open('/var/www/rsreese.com/files/' + fn, 'wb') as f:
shutil.copyfileobj(fileitem.file, f)
# line breaks are not occuring between interations
print 'File "' + fn + '" was uploaded successfully \n'
message = …Run Code Online (Sandbox Code Playgroud)