46944

[code]

    import ecdsa
    import random
    from hashlib import sha256
    
    def privatekey():
        n = 1.158 * 10**77
        rng = random.SystemRandom()
        random_num = rng.randint(0, n)
        private_key = int(sha256(str(random_num).encode()).hexdigest(),16)
    
        while private_key > n:
            random_num = rng.randint(0, n)
            private_key = int(sha256(str(random_num).encode()).hexdigest(),16)
    
            if private_key < n: 
                print(random_num)
                print(private_key)
                return private_key
                break
    
        else:
            print(random_num)
            print(private_key)
            return private_key
    
    private_key = privatekey()        
    
    def private_to_public_key(private_key):
        signing_key = ecdsa.SigningKey.from_string(private_key,curve=ecdsa.SECP256k1)
    verifying_key = signing_key.verifying_key
    return verifying_key.to_string()
    
    public_key = private_to_public_key(private_key)
    print(public_key)
    
[/code]

このコードでこんなエラー文が出ます。

[code]

    assert len(string) == curve.baselen, (len(string), curve.baselen)
    
    TypeError: object of type 'int' has no len()
    
[/code]

どう対処すればよいのでしょうか。


CC BY-SA 4.0
2018-07-25T07:03:19.160
46940
2018-07-25T08:00:28.020
2018-07-25T08:00:28.020
19110
28644
question
python python3
エラー文を解消したいです: object of type 'int' has no len()


以下の行を

[code]

    signing_key = ecdsa.SigningKey.from_string(private_key,curve=ecdsa.SECP256k1)
    
[/code]

次のように変更すれば、少なくとも`TypeError`は解消するはずです。

[code]

    signing_key = ecdsa.SigningKey.from_string(str(private_key),curve=ecdsa.SECP256k1)
    
[/code]

`str`型の引数（1つ目の引数）を受け取ることを想定している`from_string()`に対して、`int`型の引数`private_key`が与えられたことでエラーが発生しているようなので。


CC BY-SA 4.0
2018-07-25T07:29:30.080
46944
2018-07-25T07:36:23.573
2018-07-25T07:36:23.573
21092
21092
46940
answer