我不打算将密钥保存在我的应用程序中,而是将本地文件系统中的密钥读入变量(字符串数组),并在oAuth API中使用这些数组元素。但是,当我使用密钥(以明文形式)作为OAuth API的参数时,身份验证成功。但是当从文件&中读取变量中的相同值时,认证失败。该变量将传递给OAuth API。 尝试比较关键值和变量值t发现它们不匹配,尽管它们完全相同。
输入文件如下所示:
$cat .keys
k1='jFOMZ0bI60fDAEKw53lYCj2r4'
k2='LNkyPehneIi8HeqTg1ji74H42jFkkBxZolRfzNFmaJKwLg7R7E'
secret_keys=[]
def keys_io():
key_file = open('/Users/homie/.keys', 'r+')
for key in range(1,5):
secret_keys.append(key_file.readline().split("=")[1])
print secret_keys[0]
print (secret_keys[0] == "jFOMZ0bI60fDAEKw53lYCj2r4")
keys_io()
输出:
jFOMZ0bI60fDAEKw53lYCj2r4
False
我在这里缺少什么?
答案 0 :(得分:1)
您应该strip
从文件中读取的密钥,因为它有一个尾随\n
:
print(secret_keys[0].strip() == "jFOMZ0bI60fDAEKw53lYCj2r4")
或者在阅读时这样做:
for key in range(1,5):
secret_keys.append(key_file.readline().split("=")[1].strip())
答案 1 :(得分:1)
如果前导字符有误导,请使用切片删除它们,即[1:-1]
以删除倒数第一个引号。
我还重构了你的功能:
def keys_io():
with open('.keys', 'r+') as f:
for line in f:
secret_keys.append(line.split('=')[1].strip()[1:-1])
print secret_keys[0]
print (secret_keys[0] == "jFOMZ0bI60fDAEKw53lYCj2r4"
for line in <opened_file>
代替其他方法。strip()
来删除不需要的空间。完成这些更改后,keys_io
文件在使用您提供的.key
文件时就像魅力一样。
答案 2 :(得分:0)
当您从Python读取文本文件时,您需要首先转义新行字符。另一个问题是你在输入文本之间有单引号。所以你需要改变:
secret_keys.append(key_file.readline().strip().split("=")[1])
和
if(secret_keys[0] == "\'jFOMZ0bI60fDAEKw53lYCj2r4\'"):