こんにちは。株式会社LiemPiaのtampopo256です。
普段は教育系のWebサービス「clemy」を作ったりしています。
📌 この記事でできること
- 秘密のメッセージをAES暗号化
- 暗号文をQRコード画像に変換
- 好きな人にだけ復号できるラブレターを送る
🧠 背景:暗号化されたラブレターってロマンじゃない?
「好き」という気持ちは誰にでも言えるものじゃない。
でも、言葉だけだとちょっと恥ずかしい…。
そんなときに便利なのが、「暗号化されたQRコード」です。
- 見た目はただのQR
- でも中身は暗号文
- しかも復号するには、ふたりだけが知っているパスワードが必要
感情 × 技術 = ロマン、そう思いませんか?
💡 技術構成
要素 | 使用技術 |
---|---|
暗号方式 | AES(CBC) |
パスワード管理 | PBKDF2で鍵導出 |
QRコード生成 |
qrcode ライブラリ |
使用言語 | Python 3.x |
⚙️ 準備:必要なパッケージのインストール
pip install pycryptodome qrcode pillow
✏️ ステップ1:AESでメッセージを暗号化する
from Crypto.Cipher import AES
from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes
import base64
import json
def encrypt_message(message, password):
salt = get_random_bytes(16)
key = PBKDF2(password, salt, dkLen=32, count=100000)
cipher = AES.new(key, AES.MODE_CBC)
ct_bytes = cipher.encrypt(pad(message.encode(), AES.block_size))
data = {
"salt": base64.b64encode(salt).decode(),
"iv": base64.b64encode(cipher.iv).decode(),
"ciphertext": base64.b64encode(ct_bytes).decode()
}
return json.dumps(data)
※
pad
はfrom Crypto.Util.Padding import pad
を使ってください。
📷 ステップ2:QRコードとして保存する
import qrcode
def save_qr_code(data, filename="loveletter.png"):
qr = qrcode.make(data)
qr.save(filename)
print(f"QRコードを保存しました: {filename}")
💌 ステップ3:暗号文をQRに変換して送信
if __name__ == "__main__":
secret_message = "君の笑顔が好きです。"
password = "2人だけのヒミツ"
encrypted = encrypt_message(secret_message, password)
save_qr_code(encrypted, "secret_love.png")
→ LINEやSlackでこのQR画像だけ送信すればOK!
🔓 復号方法(相手側)
復号コード(相手に送ってもよい):
from Crypto.Cipher import AES
from Crypto.Protocol.KDF import PBKDF2
from Crypto.Util.Padding import unpad
import base64
import json
def decrypt_message(data_json, password):
data = json.loads(data_json)
salt = base64.b64decode(data['salt'])
iv = base64.b64decode(data['iv'])
ciphertext = base64.b64decode(data['ciphertext'])
key = PBKDF2(password, salt, dkLen=32, count=100000)
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = unpad(cipher.decrypt(ciphertext), AES.block_size)
return plaintext.decode()
🧪 ヒントの渡し方(恋愛演出)
- QRだけ送って「ヒントは“最初に出会った日のカフェの名前”だよ」
- デート中に耳元で「パスワードは"その時のBGM"」とだけ伝える
- 解けたら「正解!じゃあ、今度また会おうか」
→ 告白の演出にも、プロポーズにも、記念日サプライズにも使えます
✅ 注意点(マジで実用したい人向け)
- 相手がエンジニアでなくても、復号ページを用意すると親切(Flaskなどで簡単に)
- QRコードに入る文字数は制限あり(暗号文を長くしすぎない)
- 画像の圧縮劣化で読み取れない場合あり → PNG推奨
🏁 まとめ
- AES暗号でふたりだけのメッセージを安全に共有
- QRコード化すれば恥ずかしさゼロでラブレターを送れる
- 技術で演出する、ちょっと特別な気持ちの伝え方
💬 最後に
「ただ“好き”って言うのが恥ずかしい」
でも、相手だけには伝えたい。
そんなとき、ちょっとだけ技術を使ってみると、言葉以上に伝わるものがあるかもしれません。
「ヒントは“あの日の空の色”だよ」
そうやって伝える愛も、なかなかいいと思いませんか?