Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- textview
- intent
- Dialog
- appbar
- livedata
- Coroutines
- ScrollView
- activity
- scroll
- CustomScrollView
- DART
- Compose
- 계측
- 안드로이드
- 앱
- Kotlin
- LifeCycle
- Flutter
- Button
- 앱바
- tabbar
- drift
- binding
- textfield
- Navigation
- TEST
- viewmodel
- 테스트
- android
- data
Archives
- Today
- Total
Study Record
[암호 프로그래밍] AES 암호화/복호화 프로그램 본문
728x90
AES-CBC 암호화/복호화 프로그램
# AES-CBC
# Cipher Algorithm : AES
# * input : 16 bytes (128bits)
# * output : 16 bytes (128bits)
# * key : 128 bits(16), 192 bits(24), 256 bits(32)
# * Cipher Mode : CBC
# * iv : 16 bytes
# * pad, unpad
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
class MyAES:
# MyAES(keysize, ivsize)
def __init__(self, keysize, ivsize):
self.key = get_random_bytes(keysize)
self.iv = get_random_bytes(ivsize)
self.msgsize = ivsize
pass
def enc(self, msg):
c = AES.new(self.key, AES.MODE_CBC, self.iv)
return c.encrypt(pad(msg.encode(), self.msgsize))
def dec(self, encMsg):
c = AES.new(self.key, AES.MODE_CBC, self.iv)
return unpad(c.decrypt(encMsg), self.msgsize).decode()
def main():
mymsg = "We are no longer the knights who say nice!"
aes = MyAES(16, 16)
ensMsg = aes.enc(mymsg)
decMsg = aes.dec(ensMsg)
print(mymsg)
print(ensMsg)
print(decMsg)
pass
if __name__ == '__main__':
main()
AES-CTR 암호화/복호화 프로그램
# AES-CTR
# Cipher Algorithm : AES
# * input : 16 bytes (128bits)
# * output : 16 bytes (128bits)
# * key : 128 bits(16), 192 bits(24), 256 bits(32)
# * Cipher Mode : CTR
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
import json
from base64 import b64decode, b64encode
def main():
mymsg = b"samsjang!"
key = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_CTR)
nonce = cipher.nonce
endMsg = cipher.encrypt(mymsg)
# Key, nonce, encMsg
sendKey = b64encode(key).decode()
sendNonce = b64encode(nonce).decode()
sendMsg = b64encode(endMsg).decode()
data = {'nonce': sendNonce, 'message': sendMsg, 'key': sendKey}
sendData = json.dumps(data)
print(sendData)
# Receiver site -> Decryption
recvData = sendData
b64 = json.loads(recvData)
recvKey = b64decode(b64['key'])
recvNonce = b64decode(b64['nonce'])
recvMsg = b64decode(b64['message'])
decMsg = AES.new(recvKey, AES.MODE_CTR, nonce=recvNonce).decrypt(recvMsg)
print(decMsg)
pass
if __name__ == "__main__":
main()
728x90
'암호 > 프로그래밍' 카테고리의 다른 글
[암호 프로그래밍] RSA를 이용한 암/복호화 , 서명 (0) | 2021.12.08 |
---|---|
[암호 프로그래밍] 인코딩/디코딩 프로그램 (0) | 2021.12.07 |
[암호 프로그래밍] 3DES-CBC 암호화 / 복호화 프로그램 (0) | 2021.12.02 |
[암호 프로그래밍] 사전파일을 이용한 공격 프로그램 - gpg (0) | 2021.12.02 |
[암호 프로그래밍] 사전파일을 이용한 공격 프로그램 - ccrypt (0) | 2021.12.02 |