728x90
OpenCrpt.java
package com.shop.cafe.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class OpenCrypt {
public static void main(String[] args) {
getSHA256("a", "");
getSHA256("a", "salt"); //salt 랜덤해야하고, 짧지않고 길어야한다.
}
public static byte[] getSHA256(String source, String salt) {
byte byteData[]=null;
try{
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(source.getBytes());
md.update(salt.getBytes());
byteData= md.digest();
System.out.println("원문: "+source+ " SHA-256: "+
byteData.length+","+byteArrayToHex(byteData));
}catch(NoSuchAlgorithmException e){
e.printStackTrace();
}
return byteData;
}
public static byte[] generateKey(String algorithm,int keySize) throws NoSuchAlgorithmException {
KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm);
keyGenerator.init(keySize);
SecretKey key = keyGenerator.generateKey();
return key.getEncoded();
}
public static String aesEncrypt(String msg, byte[] key) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
String iv = "AAAAAAAAAAAAAAAA";
cipher.init(Cipher.ENCRYPT_MODE,
skeySpec,
new IvParameterSpec(iv.getBytes()));
byte[] encrypted = cipher.doFinal(msg.getBytes());
return byteArrayToHex(encrypted);
}
public static String aesDecrypt(String msg,byte[] key ) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
String iv = "AAAAAAAAAAAAAAAA";
cipher.init(Cipher.DECRYPT_MODE,
skeySpec,
new IvParameterSpec(iv.getBytes()));
byte[] encrypted = hexToByteArray(msg);
byte[] original = cipher.doFinal(encrypted);
return new String(original);
}
public static byte[] hexToByteArray(String hex) {
if (hex == null || hex.length() == 0) {
return null;
}
byte[] ba = new byte[hex.length() / 2];
for (int i = 0; i < ba.length; i++) {
ba[i] = (byte) Integer.parseInt(hex.substring(2 * i, 2 * i + 2), 16);
}
return ba;
}
// byte[] to hex
public static String byteArrayToHex(byte[] ba) {
if (ba == null || ba.length == 0) {
return null;
}
StringBuffer sb = new StringBuffer(ba.length * 2);
String hexNumber;
for (int x = 0; x < ba.length; x++) {
hexNumber = "0" + Integer.toHexString(0xff & ba[x]);
sb.append(hexNumber.substring(hexNumber.length() - 2));
}
return sb.toString();
}
}
main메서드를 갖고있다. 근데 스프링 부트에서이미 main을 갖고있다.
public static byte[] getSHA256(String source, String salt) {
byte byteData[]=null;
try{
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(source.getBytes());
md.update(salt.getBytes());
byteData= md.digest();
System.out.println("원문: "+source+ " SHA-256: "+
salt까지있어야 rainbow테이블에 걸리지 않는다.
return 받은 byteData=md.digest에서 byteData가 해쉬값을 받는다.


자바는 잘돌아가나 큰솔에서 화면이 안나타나는 에러가 발생했다.
index.html 코드가 예전꺼여서 안돌아갔던 것..
항상 최신을 유지하자
728x90
'💡 URECA > 🗒️ 스터디 노트' 카테고리의 다른 글
[URECA] day 33 (0) | 2025.03.13 |
---|---|
[URECA] Day32 | 쇼핑몰 총정리 (4) | 2025.03.12 |
[URECA] Day 30 | Backend(5) (0) | 2025.03.10 |
[URECA] Day 29 | Backend(4) 🛍️ (0) | 2025.03.07 |
[URECA] Day28 | Backend(3) (0) | 2025.03.06 |