读取存储在 python 文件中的 int 值
Read int values stored in a file in python
我正在编写一个程序,在 python 中使用 RSA 算法加密文件,而不使用 Crypto 库。我已经生成了密钥,e、n 和 d 存储在 .pem 文件中。现在在另一个严格的加密发生的地方,我使用 e、d 和 n 值,但每次我 运行 脚本都会显示错误:
File "rsaencrypt.py", line 91, in <module>
main()
File "rsaencrypt.py", line 62, in main
encrypt = pow(content, e, n)
TypeError: unsupported operand type(s) for pow(): 'bytes','_io.TextIOWrapper', '_io.TextIOWrapper'
这里是我如何在加密脚本中打开文件并使用 pow() 来加密文件:
n = open('nfile.pem', 'r')
c = open('cfile.pem', 'r')
d = open('dfile.pem', 'r'))
encrypt = pow(content, e, n)
我在互联网上搜索了如何从文件中读取 int 值,但一无所获。
以下是我在 efile、dfile 和 nfile 中保存值的方法:
#saving the values of n, d and e for further use
efile = open('efile.pem', 'w')
efile.write('%d' %(int(e)))
efile.close()
dfile = open('dfile.pem', 'w')
dfile.write('%d' %(int(d)))
dfile.close()
nfile = open('nfile.pem', 'w')
nfile.write('%d' % (int(n)))
nfile.close()
这些值是这样存储的:564651648965132684135419864............454
现在因为想要加密文件,我需要读取写入 efile、dfile 和 nfile 中的整数值,以使用 pow() 中的值作为参数。
期待建议。谢谢。
open()
函数returns一个文件对象,不是int。您需要通过以下方式将返回的对象转换为 int
值:
n = open('nfile.pem', 'r')
n_value = int(list(n)[0])
等等
另一种选择(结果相同)是:
n = open('nfile.pem', 'r')
n_value = int(n.read())
推荐的方法是使用 with
,这样可以确保您的文件在您完成处理后立即关闭,而不是等待垃圾回收或显式调用 f.close()
来关闭您的文件。
n_results = []
with open('nfile.pem', 'r') as f:
for line in f:
#do something
try:
n.append(int(i))
except TypeError:
n.append(0) #you can replace 0 with any value to indicate a processing error
此外,如果您的文件中有无法转换为整数的噪声,请使用 try-except
块。 n_results
return 文件中所有值的列表,稍后您可以使用这些值来聚合或组合它们以获得单个输出。
随着项目的扩展和处理更多数据,这将是一个更好的基础。
我正在编写一个程序,在 python 中使用 RSA 算法加密文件,而不使用 Crypto 库。我已经生成了密钥,e、n 和 d 存储在 .pem 文件中。现在在另一个严格的加密发生的地方,我使用 e、d 和 n 值,但每次我 运行 脚本都会显示错误:
File "rsaencrypt.py", line 91, in <module>
main()
File "rsaencrypt.py", line 62, in main
encrypt = pow(content, e, n)
TypeError: unsupported operand type(s) for pow(): 'bytes','_io.TextIOWrapper', '_io.TextIOWrapper'
这里是我如何在加密脚本中打开文件并使用 pow() 来加密文件:
n = open('nfile.pem', 'r')
c = open('cfile.pem', 'r')
d = open('dfile.pem', 'r'))
encrypt = pow(content, e, n)
我在互联网上搜索了如何从文件中读取 int 值,但一无所获。
以下是我在 efile、dfile 和 nfile 中保存值的方法:
#saving the values of n, d and e for further use
efile = open('efile.pem', 'w')
efile.write('%d' %(int(e)))
efile.close()
dfile = open('dfile.pem', 'w')
dfile.write('%d' %(int(d)))
dfile.close()
nfile = open('nfile.pem', 'w')
nfile.write('%d' % (int(n)))
nfile.close()
这些值是这样存储的:564651648965132684135419864............454
现在因为想要加密文件,我需要读取写入 efile、dfile 和 nfile 中的整数值,以使用 pow() 中的值作为参数。
期待建议。谢谢。
open()
函数returns一个文件对象,不是int。您需要通过以下方式将返回的对象转换为 int
值:
n = open('nfile.pem', 'r')
n_value = int(list(n)[0])
等等
另一种选择(结果相同)是:
n = open('nfile.pem', 'r')
n_value = int(n.read())
推荐的方法是使用 with
,这样可以确保您的文件在您完成处理后立即关闭,而不是等待垃圾回收或显式调用 f.close()
来关闭您的文件。
n_results = []
with open('nfile.pem', 'r') as f:
for line in f:
#do something
try:
n.append(int(i))
except TypeError:
n.append(0) #you can replace 0 with any value to indicate a processing error
此外,如果您的文件中有无法转换为整数的噪声,请使用 try-except
块。 n_results
return 文件中所有值的列表,稍后您可以使用这些值来聚合或组合它们以获得单个输出。
随着项目的扩展和处理更多数据,这将是一个更好的基础。