无法从存储在网站中的字符串可靠地匹配 Base 64 加密字符串:Python 程序
Posted
技术标签:
【中文标题】无法从存储在网站中的字符串可靠地匹配 Base 64 加密字符串:Python 程序【英文标题】:Unable to reliabily Match Base 64 encrypted String from strings stored in a Website: Python Program 【发布时间】:2017-02-19 23:37:40 【问题描述】:我是 Rishabh 并且是 Python 编程语言的初学者。我尝试使用 Python 编写一种身份验证程序。
这是我在我的计划中所做的:
-
我得到了用户名和密码
我连接两个字符串,例如:###Username:::Password
然后我使用我在网上看到的base64编码程序对上面连接的字符串进行加密。(我不熟悉base64编码,并且我是我在下面的Python程序中使用的所有工具的初学者)
现在您获得了一个加密字符串。
我在为此目的创建的博客的 html 中隐藏了相同的加密字符串:https://pastarchive.blogspot.in
加密字符串作为隐藏文本存储在页面的 html 代码中:
<span style="background-color: white; display: none;">HELLO !! POST</span><br />
<span style="background-color: white; display: none;">HELLO !! POST</span><br />
<span style="background-color: white; display: none;">HELLO !! POST</span><br />
<span style="background-color: white; display: none;">HELLO !! POST</span><br />
<span style="background-color: white; display: none;">HELLO !! POST</span><br />
<span style="background-color: white; display: none;">IIKTxK6FBJC+or4JPyQqSI0BrAevMJix//LSgGyoiETg=</span><br />
<span style="background-color: white; display: none;">4M3CXPZGRKUsQRqbaOPd/gajp6XD9irrM2pQ8N9MHyM=</span><br />
<span style="background-color: white; display: none;">F5uxniPOSEiU2h/v1QreAx1+hXzW7GRRcJS15kYE/EM=</span><br />
<span style="background-color: white; display: none;">mAHuxBo7URh0QcRswXTccxq/sMTUNfbqmSaiopZxzuA=</span><br />
您在上面的html代码中看到的随机字符来自网站:
-
所以我要做的是.. 如前所述,我在程序中创建了一个加密字符串,我只是检查网站中是否存在确切的字符串。如果是,我只显示“成功登录消息”,如果不是,我只显示“登录失败”。
问题:
我遇到的问题是,奇怪的是,这种方法只对少数用户有效,而其他用户无法从网站源代码中找到确切的字符串,即使网站中存在确切的加密字符串。
请下载代码并运行,以便理解
1.成功登录的账号:
用户名是:USER
密码是:TEMPPASS
这个帐户和我想的一样完美
2。奇怪地不起作用的帐户:
用户名是:user2
密码是:CLR
谁能告诉我为什么第一个帐户工作得很好,后来却失败了?我该如何解决这个问题?由于我是初学者,请指导我解决此问题。
不要对管理员帐户感到困惑..它只是一个本地验证帐户..
守则:
import requests
from getpass import getpass
from bs4 import BeautifulSoup
import re
import csv
import time
from Crypto.Cipher import AES
import base64
counter =1
counter2=1
import requests
import urllib2
from bs4 import BeautifulSoup
import re
print("\nPlease Authenticate Yourself:")
#print("Welcome to Mantis\n")
user = raw_input("\nEnter Username:")
password= getpass("\nEnter Password:")
print "\n...................................................................."
matchstring="###"+user+":::"+password
matches=""
chkstr=matchstring
print chkstr
###Encryption
msg_text = chkstr.rjust(32)
secret_key = '1234567890123456'
cipher = AES.new(secret_key,AES.MODE_ECB)
encoded = base64.b64encode(cipher.encrypt(msg_text))
#encoded = encoded.encode('string-escape')
print "Encrypted Text: \n"+encoded
##print matchstring #data sent for Authentication
if encoded == "OiKUr4N8ZT7V7hZlwvnXP2d0F1I4xtktNbZSpNotJh0=":
print "\nHello Rishabh !! Is the Login Portal Locked ?"
print "\n\nAdministrator Access Granted"
counter2=2
if counter2==1:
###https://pastarchive.blogspot.in
###https://pastarchive.wordpress.com/2016/10/08/hello/
html_content = urllib2.urlopen('https://pastarchive.blogspot.in').read()
rematchstring=re.compile(encoded)
matches = re.findall(encoded, html_content);
if len(matches) != 0 or counter2==2:
print 'Sucessfully Logged in\n'
print 'Hello '+user.upper()+" !\n"
if user.upper()!="ADMINISTRATOR":
print "Thanks in Advance for using Eagle, the Advanced Data Parsing Algorithm."
print "\nCreator - Rishabh Raghunath, Electrical Engineering Student, MVIT\n"
time.sleep(1)
print "Let's Start !\n"
print ".....................................................................\n"
if len(matches) == 0:
print '\nUserName or Password is Incorrect\n'
print "Please Check Your mail in case your Password has been Changed"
print "Log in failed.\n"
time.sleep(5)
请尝试帮助我解决这个奇怪的问题.. 我不知道如何解决这个问题.. 谢谢。
【问题讨论】:
Base64 是一种编码而不是加密。将此类数据存储在网页 html 中(无论是否隐藏)都不是一个好主意,因为这种编码是两种方式,任何人都可以将其作为明文读取。 @marekful 是的.. 我知道.. 我不是想构建一个超级安全的应用程序。这只是针对我正在做的一个小项目,只有 3 或 4 人使用......而且没有人会知道这个 url,因为 Python 程序将被打包到一个 exe 文件中,因此没有人能够查看程序的源代码。你能告诉我如何解决这个问题吗? 使用print()
来查看变量中的值 - 这有助于发现问题。
matched = html_content.find(encoded)
, find
如果在html_content
中没有encoded
或在html_content
中没有encoded
的位置,则返回-1。所以现在你需要if matched != -1 or counter2 = 2
和if matched == -1:
可能是因为某些encoded
具有+
在re
中具有特殊含义,因此re
不会将+
视为文本的一部分。例如1+2
搜索12 or 112 or 1112 or etc. 111...2
【参考方案1】:
问题是因为您使用了re
,而encodec
中有+
。 re
以特殊方式对待 +
,即。 1+2
正在搜索12 or 112 or 1112 etc.
使用html_content.find(encoded)
返回encodec
在html_content
或-1
中的位置
现在您将不得不使用if matched != -1 or counter2 = 2
和if matched == -1:
顺便说一句:你的代码很乱。它可能看起来像这样。
from getpass import getpass
from Crypto.Cipher import AES
import base64
import urllib2
import time
# --- constants ---
SECRET_KEY = '1234567890123456'
# --- classes ---
# empty
# --- functions ---
# empty
# --- main ---
loggedin = False
# ------ input
print("\nPlease Authenticate Yourself:")
#print("Welcome to Mantis\n")
user = raw_input("\nEnter Username:")
password = getpass("\nEnter Password:")
print "\n...................................................................."
# ------ encrypting
matchstring = "###:::".format(user, password)
cipher = AES.new(SECRET_KEY, AES.MODE_ECB)
encoded = base64.b64encode(cipher.encrypt(matchstring.rjust(32)))
print "Encrypted Text: \n", encoded
# ------ checking
# print matchstring #data sent for Authentication
if encoded == "eiKUr3N8ZT7V7RZlwvnXW2F0F1I4xtktNZZSpNotDh0=":
print "\nHello Rishabh !! Is the Login Portal Locked ?"
print "\n\nAdministrator Access Granted"
loggedin = True
else:
html = urllib2.urlopen('https://passarchive.blogspot.in').read()
loggedin = (html.find(encoded) != 1) # True or False
# ------ info
if loggedin:
user = user.upper()
print 'Sucessfully Logged in\n'
print 'Hello', user, "!\n"
if user != "ADMINISTRATOR":
print "Thanks in Advance for using Eagle, the Advanced Data Parsing Algorithm."
print "\nCreator - Rishabh Raghunath, Electrical Engineering Student, MVIT\n"
time.sleep(1)
print "Let's Start !\n"
print ".....................................................................\n"
else:
print '\nUserName or Password is Incorrect\n'
print "Please Check Your mail in case your Password has been Changed"
print "Log in failed.\n"
time.sleep(5)
# ------ end
【讨论】:
太棒了!!知道了 !!我知道我的代码很乱 .. 实际上这是我的第一个 Python 程序 .. 自从我开始学习 Python 才 2 天 .. 所以不确定该怎么做 .. 所以我留下的东西不完整 .. 这只是身份验证我正在编写的程序的一部分..完整的程序大约是原来的 4 倍..我会改进和改进这段代码,因为很多东西都是以低效的方式编写的..无论如何@furas,谢谢帮帮我哥们.. !!以上是关于无法从存储在网站中的字符串可靠地匹配 Base 64 加密字符串:Python 程序的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 存储:字符串与格式“base64”不匹配:发现无效字符
MongoDB:存储的base64缓冲区数据和检索的base64不匹配