Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 안스
- GIT
- 안드로이드스튜디오
- 안드로이드 스튜디오
- Gradle
- 에러
- coroutine
- build
- dart
- Android
- 깃헙
- viewpager
- WebView
- Github
- 레트로핏
- studio
- 스튜디오
- 웹뷰
- 코루틴
- 의존성주입
- 안드로이드
- RecyclerView
- 유튜브
- image
- error
- Retrofit
- MVVM
- Kotlin
- ADB
- 코틀린
Archives
- Today
- Total
코딩하는 일용직 노동자
AES256 암호화/복호화 본문
import android.util.Base64
import java.io.UnsupportedEncodingException
import java.security.InvalidAlgorithmParameterException
import java.security.InvalidKeyException
import java.security.NoSuchAlgorithmException
import java.security.spec.AlgorithmParameterSpec
import javax.crypto.BadPaddingException
import javax.crypto.Cipher
import javax.crypto.IllegalBlockSizeException
import javax.crypto.NoSuchPaddingException
import javax.crypto.spec.IvParameterSpec
import javax.crypto.spec.SecretKeySpec
object AES256Chiper {
var ivBytes = byteArrayOf(
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
)
var secretKey = "abcd1234efgh5678" // 16글자여야 한다.
//AES256 암호화
@Throws(
UnsupportedEncodingException::class,
NoSuchAlgorithmException::class,
NoSuchPaddingException::class,
InvalidKeyException::class,
InvalidAlgorithmParameterException::class,
IllegalBlockSizeException::class,
BadPaddingException::class
)
fun encode(str: String): String {
val textBytes = str.toByteArray(charset("UTF-8"))
val ivSpec: AlgorithmParameterSpec =
IvParameterSpec(ivBytes)
val newKey = SecretKeySpec(
secretKey.toByteArray(charset("UTF-8")),
"AES"
)
var cipher: Cipher? = null
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
cipher.init(Cipher.ENCRYPT_MODE, newKey, ivSpec)
return Base64.encodeToString(cipher.doFinal(textBytes), 0)
}
//AES256 복호화
@Throws(
UnsupportedEncodingException::class,
NoSuchAlgorithmException::class,
NoSuchPaddingException::class,
InvalidKeyException::class,
InvalidAlgorithmParameterException::class,
IllegalBlockSizeException::class,
BadPaddingException::class
)
fun decode(str: String?): String {
val textBytes = Base64.decode(str, 0)
//byte[] textBytes = str.getBytes("UTF-8");
val ivSpec: AlgorithmParameterSpec =
IvParameterSpec(ivBytes)
val newKey = SecretKeySpec(
secretKey.toByteArray(charset("UTF-8")),
"AES"
)
val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
cipher.init(Cipher.DECRYPT_MODE, newKey, ivSpec)
return String(cipher.doFinal(textBytes), charset("UTF-8"))
}
}
private fun testEncryp() {
val test = "테스트할 문자열 입니다."
val encode = AES256Chiper.encode(test)
val decode = AES256Chiper.decode(encode)
Log.d("TEST" , "encode: $encode")
Log.d("TEST" , "decode: $decode")
}
'안드로이드' 카테고리의 다른 글
안드로이드 스튜디오 오프라인 모드로 사용하기 (0) | 2020.06.09 |
---|---|
코틀린 Singleton Pattern (2) | 2020.06.08 |
리사이클러뷰 어댑터 보일러플레이트 코드 (0) | 2020.06.07 |
Live Layout Inspector 기능 살펴보기 (0) | 2020.06.04 |
http CLEARTEXT 오류 수정하기. (0) | 2020.06.03 |