Skip to content

Commit

Permalink
Merge pull request #19 from Re-4aliens/feat/#14_encod
Browse files Browse the repository at this point in the history
Feat/#14 대칭키 암호화, 복호화 기능 구현
  • Loading branch information
mjj111 authored Jan 22, 2024
2 parents 200d277 + 3f9e9f4 commit ecd47e1
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 0 deletions.
27 changes: 27 additions & 0 deletions src/main/java/com/aliens/backend/encode/EncoderProperties.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.aliens.backend.encode;

import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;

@Component
public class EncoderProperties {

@Value("${encode.symmetric.key}")
private String secretKey;

private SecretKeySpec encodeKey;

@PostConstruct
public void init() {
byte[] byteKey = secretKey.getBytes(StandardCharsets.UTF_8);
encodeKey = new SecretKeySpec(byteKey, "AES");
}

public SecretKeySpec getEncodeKey() {
return encodeKey;
}
}
32 changes: 32 additions & 0 deletions src/main/java/com/aliens/backend/encode/SymmetricKeyEncoder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.aliens.backend.encode;

import org.springframework.stereotype.Component;

import javax.crypto.Cipher;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

@Component
public class SymmetricKeyEncoder {

private final EncoderProperties encoderProperties;

public SymmetricKeyEncoder(final EncoderProperties encoderProperties) {
this.encoderProperties = encoderProperties;
}

public String encrypt(String plaintext) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, encoderProperties.getEncodeKey());
byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(encryptedBytes);
}

public String decrypt(String ciphertext) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, encoderProperties.getEncodeKey());
byte[] decodedBytes = Base64.getDecoder().decode(ciphertext);
byte[] decryptedBytes = cipher.doFinal(decodedBytes);
return new String(decryptedBytes, StandardCharsets.UTF_8);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.aliens.backend.encode;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SymmetricKeyEncoderTest {

@Autowired
private SymmetricKeyEncoder symmetricKeyEncoder;

@Test
@DisplayName("문자열 암호화 성공")
void encryptTest() throws Exception {
//Given
String givenInput = "testText";

//When
String result = symmetricKeyEncoder.encrypt(givenInput);

//Then
Assertions.assertNotEquals(result, givenInput);
}

@Test
@DisplayName("문자열 복호화 성공")
void decryptTest() throws Exception {
//Given
String givenInput = "testText";
String code = symmetricKeyEncoder.encrypt(givenInput);

//When
String result = symmetricKeyEncoder.decrypt(code);

//Then
Assertions.assertEquals(result, givenInput);
}
}

0 comments on commit ecd47e1

Please sign in to comment.