无法从存储在网站中的字符串可靠地匹配 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 = 2if 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) 返回encodechtml_content-1 中的位置

现在您将不得不使用if matched != -1 or counter2 = 2if 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不匹配

GitHub API:无法可靠地将文件添加到存储库

在启动时可靠地选择 MKMapView 中的注释(在 ios 6 和 ios 5.1 中)?

Base64和urlencode

Base64 编码知识,一文打尽!