Python:将字符串转换为实例

时间:2016-05-07 05:24:34

标签: python string instance

我是Python的新手,因为这个问题我已经被困了好几个小时......我不知道如何将变量(类型字符串)转换为另一个变量(类型实例)。

>>from Crypto.PublicKey import RSA
>>from Crypto import Random
>>randomValue = Random.new().read
>>priv = RSA.generate(512, randomValue)

在这些代码行之后,创建了“priv”,并​​且它具有“instance”类型。 我必须使用str(priv)将此“priv”转换为类型字符串。

>>convertedToStr = str(priv)
>>type(convertedToStr)
<type 'str'>

现在,我需要将其转换回'instance',并希望获得与原始“priv”相同的值和类型。假设我不能再使用“priv”了,我需要将“convertedToStr”(类型字符串)转换为“convertedToStr”(类型实例)。 这有可能吗?

注意:我做这个复杂事情的原因是因为我有客户端和服务器端,当一方使用sendall(var)向另一方发送消息时,它不允许我发送'instance'类型的变量。所以我必须在发送之前将其转换为字符串。现在,我想在接收器端使用它作为'instance'类型的变量,但我不知道如何将其转换回来。

2 个答案:

答案 0 :(得分:1)

{2}类型用于Python 2中的旧式类的实例。您可能希望查看instance而不是priv.__class__以找出它实际具有的类。我希望你会发现它的类是Crypto.PublicKey.RSA._RSAObject,因为这是记录type(priv)函数返回的内容。

我没有安装generate软件包,所以当你在私钥实例上调用Crypto时,我实际上并不知道你得到了什么字符串。您可以解析字符串,然后使用适当的值调用函数str以重建关键对象。

但我认为这比做必要的工作更多。您应该改为调用exportKey method,而不是在密钥上调用Crypto.PublicKey.RSA.construct。然后,在您发送字符串后,您将返回到另一个系统,您可以将其传递给str

请注意,通过网络发送私钥可能会使其遭到窃听,使其无用!除非您的两个系统之间的连接使用其他系统加密,否则您可能不应该这样做。您的系统仅与其最薄弱的环节一样安全。

答案 1 :(得分:0)

类型def diagonal_sum(matrix) total = 0 matrix.each_with_index do |row, index| total+=row[index] end total end 不是特定的,您可以创建自定义类并实例化它,它将具有类型instance

instance

你不能通过调用>>> class x: ... y=1 ... >>> type(x()) <type 'instance'> 任意地将事物转换为字符串并保证得到有用的结果 - 它只是要求对象返回一个可以说任何东西的字符串。在这种情况下,您要求一个长度为512字节的RSA私钥,并且str()输出长约45个字节,从那里获取完整对象状态所需的信息不是10%。

您尝试解决的一般问题是序列化/反序列化,它是许多模块,库和协议的主题 - 但幸运的是,RSA密钥很容易转换为有用的文本,然后再返回(不是所有对象都是)。

str()

NB。当我尝试你的代码时,它明显地抱怨我512字节密钥很弱并且拒绝生成它们,坚持1024字节或更多。您可能使用旧版本,但应指定更长的密钥长度。