Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

README.md

crypto

pycryptodome で PKCS#1 v1.5 で署名する

https://www.pycryptodome.org/src/signature/pkcs1_v1_5

Python 3.12.2 (main, Feb 25 2024, 04:38:01) [Clang 17.0.6 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from Crypto.PublicKey import RSA
>>> rsa = RSA.generate(3072)
>>> pem = rsa.export_key()
>>> pem
b'-----BEGIN RSA PRIVATE KEY-----\n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\n-----END RSA PRIVATE KEY-----'
>>> RSA.import
RSA.import_key(  RSA.importKey(
>>> RSA.import_key(pem)
RsaKey(n=3795578298680527179276450237576520232685862252937805796555048333124431795612076130998435669991454390469638864084414714222302222321724024355476123269889329151786942281525783105446793293627886220548749260335424142783266957923955209644171255672837180281907543879380340095430994042108059505183864474094520575522132274049467799489107081282491379084583950921117323324509894558230998529190574923972196181351731849961785480055569398993797911863819712871843153020162091252374974055115483329275455375248037944391448107174120528047529993316439735421308366394587024094198553727800919648624018682285293039064152866361393434260884991911183461294592798048459435839729940070685270150591477716825225474829032437774047926207798543104996123211725106762226262815527896776039743423805557850513586611040702957468024105538115972302393223693405463365027383002591929319142518093759041415823162395808066066163655053815743884009063875216044864110238373, e=65537, d=1190154173030270435542228853658200570390687234659381862447262511950609173441386766132380991170245628029221335382070012012577790693980937493401198303190956468395283029210291023649718512962953168931699609379327191268995162813941430919750969743454904173111372609690190105758684827888377906091649220175509984085017901822124346239546371062990338895405651638447914831601665214636724594883292105034234577822880045115197394069639305267597648485611106695704362338287241942050873640089317330197741958137971767072912150426272689560853304011719889437271030436459082564841519357772266283384805007568395611273089217025338911031853308927353601318154334733216081183456290353518394200184565968417357611311922589424569485581310766428701284837916939566500556696384265559567662284804224531119077907326981056379023279811349407820437264645006834581118160883794246686911530640040006520906509807761225339723481148683930874481572768167696394686926473, p=1883582580243770007162771132207829795161896947048606761178651911505363231061653890644833949722527677036752100245480871491241586349912223568474166541191220569282886115304204832616081522393002483678905123947712281320360761896869107740658731016136932973825825624797893312530108199850940199964248111898083932487750877393834956950409427519459387850951488719325586414127376919985614212915224015828937606207911768590237858695334499937276531209960177076270650988753339043, q=2015084625697329386873296665887494976545490644189424557343348009547519988834086031870715658602716197656969937874472102627490911400781883165712548731887446889432580899781731973441585586803409942966060681448743142874704445778809098870199598643572453710425749763405434593824831105095442411557417622612864473873908645528033563160736842391966980863914019004949823286807346769107429125400506288953079249934887066152468142889590333508690123733859162492015646010704972311, u=731047393411432937967425054587150290983357379756273804475873066759311877813595843687952763365077572224353148857310841895725182388351991419214325224437339780332685023461507822867484853775952717769052762265857586112225408429242693892867538567096082272325393358398304754542209118571304032502633762006977521629078689523424331668568592075389732023156917415280176777628807856787840686092362562737882103109602244156405406969503014304499635947469780428249711172716692673)
>>> mykey = RSA.import_key(pem)
>>> from Crypto import Signature
>>> signer = Signature.pkcs1_15.new(mykey)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'Crypto.Signature' has no attribute 'pkcs1_15'
>>> from Crypto.Signature import pkcs1_15
>>> pkcs1_15.new(mykey)
<Crypto.Signature.pkcs1_15.PKCS115_SigScheme object at 0x7fdd3631b9e0>
>>> signer = pkcs1_15.new(mykey)
>>> signer.
signer.can_sign()  signer.sign(       signer.verify(
>>> #signer.sign(b"hello")
>>> msg = b"hello"
>>> sign = signer.sign(msg)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/methane/notes/python/crypto/.venv/lib/python3.12/site-packages/Crypto/Signature/pkcs1_15.py", line 77, in sign
    em = _EMSA_PKCS1_V1_5_ENCODE(msg_hash, k)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/methane/notes/python/crypto/.venv/lib/python3.12/site-packages/Crypto/Signature/pkcs1_15.py", line 192, in _EMSA_PKCS1_V1_5_ENCODE
    digestAlgo = DerSequence([ DerObjectId(msg_hash.oid).encode() ])
                                           ^^^^^^^^^^^^
AttributeError: 'bytes' object has no attribute 'oid'
>>> rom Crypto.Hash import SHA1
  File "<stdin>", line 1
    rom Crypto.Hash import SHA1
        ^^^^^^
SyntaxError: invalid syntax
>>> from Crypto.Hash import SHA1
>>> sig = signer.sign(SHA1(msg))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable
>>> sig = signer.sign(SHA1.new(msg))
>>> sig
b'\x94\x94(Y\x88\xf1\x84 c\x89\x11E&C\xe7\x93L\xf0\x0c\xbf\xc3\x17\x91iW\x86,|m\n\xb8\xcb\xd9\xca=2\xf8g\x12;\xd7\x88\x0c\xd1#\xdf\xf0Y)\xbf\xef\x8d\xa5G\x9d\xde\xea\x08/\xe3\xf2\x86\xa3XD\xe3\xfe\xa7\x01\x18\x14\x1b\xf8\xe6\xb5\x92\xa6U\x96Ym\x96\xca\x7f\xdc\xd8\xa8\x9bN@\x88O\xe4\xac\xe7z\xa7\x1a\xf5F\x8b4-O\xe5\xd29]\x91\x87\xd2\xc2N\xa6W\xde\x06}&W\xcb\xd34\x0c\xac%\xc3)@\xb6?\xe7\xc5\xf8\xe8R\xc8H*\xde1\x81\x0c\xa3\x12F\x1b\x9b\xd6\xb9\xd5\x96\xf7P\xabG6\xa4>\n\xeau8(D\xc2\xf8Y\x17CO\xb0\x88^\x82l&\x9d\n\t)\xab\x16\x94\xba\x96\xcc\x0c\'Id\xc4\x83\n\x80o#\x1aO9\xc5M\x85\x13\x0f\xe86\xcf\xe5\xbd\x9cq\xb93\'l\x06~}T\xbc\x9e\x03\x97C\xd9g\xb8\x1d\xff\x96\x82\x8c5`@\xd5\xc7\x9c^\x07:r\xb2\x97d\xe3\x84Q:\x92}\x04g\x0b\x01\xaa7\xc0m\xfe\x85\xb6F\x02yj\x0b\\PO\x9c2\x9c\xf5\x17\xed\xe8\xd1\xe7\xac\xd0]!\x9aZ+o\x90r/,\x7fR\xae\xf3\x06\x13\xaa\r\xfc\x9b\xfb\x93@\xf5Jv\xdcQQ\xbd\xe7z=\xe65y\xef:\x9e\x85i\x16\xe6\xe4\x82\xd1\xb7,?"J\xfc\xd7\x83\x14\x9f\x8c)\xd0\xba\xf2\xa9\x0b\x98\xc0/\xb5CH}\xba\x16+G\x99%a.@g\x1b\x02,\xda\x84`q>\xe9\xa2\xe9\xc9\xa9Y\x83\x103\xc2\x07\xdb}['
>>> signer.
signer.can_sign()  signer.sign(       signer.verify(
>>> signer.verify(SHA1.new(msg), sig)
>>> from Crypto.Util.strxor import strxor
>>> strxor(b"foo", b"bar")
b'\x04\x0e\x1d'
>>> strxor(b"foo", _)
b'bar'
>>>