귀하는 로그인되어 있지 않습니다. 이대로 편집하면 귀하의 IP 주소가 편집 기록에 남게 됩니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!== 구현 == === 프로그래밍 언어별 구현 === '''Python:''' <syntaxhighlight lang="python"> from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP # 키 생성 key = RSA.generate(2048) public_key = key.publickey() # 암호화 cipher = PKCS1_OAEP.new(public_key) ciphertext = cipher.encrypt(b"Hello RSA!") # 복호화 decipher = PKCS1_OAEP.new(key) plaintext = decipher.decrypt(ciphertext) </syntaxhighlight> '''Java:''' <syntaxhighlight lang="java"> import java.security.*; import javax.crypto.Cipher; KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(2048); KeyPair pair = keyGen.generateKeyPair(); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, pair.getPublic()); byte[] encrypted = cipher.doFinal("Hello RSA!".getBytes()); cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate()); byte[] decrypted = cipher.doFinal(encrypted); </syntaxhighlight> '''JavaScript (Node.js):''' <syntaxhighlight lang="javascript"> const crypto = require('crypto'); // 키 생성 const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', { modulusLength: 2048, }); // 암호화 const encrypted = crypto.publicEncrypt( publicKey, Buffer.from('Hello RSA!') ); // 복호화 const decrypted = crypto.privateDecrypt(privateKey, encrypted); </syntaxhighlight> === 주의사항 === '''절대 직접 구현하지 마라!'''<ref>심각하다. 정말로 하지 마라.</ref> * 타이밍 공격, 부채널 공격 등 고려할 게 너무 많다 * 패딩, 난수 생성 등을 잘못하면 보안이 무너진다 * '''검증된 라이브러리를 사용'''하라 ** [[OpenSSL]] ** [[PyCryptodome]] ** [[Bouncy Castle]] ** [[libsodium]]<ref>사실 libsodium은 RSA 대신 더 현대적인 암호를 권장한다.</ref> 편집 요약 가온 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 가온 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 취소 편집 도움말 (새 창에서 열림)