[Spring]暗号学
暗号学暗号技術シリーズ 情報保護言語学と数学方法学 暗号学でよく使われる用語コメント:オリジナル 、情報(データ)を含むパスワード:内容を第三者が解読できない文字、数字、コードなど に変更暗号化:コメントをパスワードに変更: 復号:パスワードを平文 に変更
暗号化の基本要素
コメント(データ)
アルゴリズム(Algorithm) 文を暗号文とし、暗号文を暗号/復号する際に用いる一連の順序アルゴリズム
鍵(key) 暗号化ランダム性の任意の値 を追加
[コメント]->暗号化アルゴリズム+Key-><暗号文>
<暗号文>>復号アルゴリズム+Key>[コメント]
暗号学の種類初期暗号学、現代暗号学 マシン(コンピュータ)は、暗号化を実行する前後に を分割する.
暗号システム暗号化/復号に必要な要素の組み合わせ アルゴリズムと鍵は重要な要素 である.アルゴリズム:暗号化/復号化のための数学的原理と実行手順 は暗号化アルゴリズムと復号化アルゴリズム に分けられる.アルゴリズムは理解しやすく、実施しやすいが、攻撃の面では 強くなければならない.
鍵:暗号化/復号化の知識(その他の情報) キーは同じアルゴリズムであり、 を複数のユーザが使用できる.
たいしょうキー暗号システム暗号鍵は復号鍵と同じ である.鍵(Secrete Key)、慣用鍵(Conventional Key)、およびSingle Keyシステム( とも呼ばれる)は、送信者および受信者が秘密鍵を使用することのみを許可するシステム である.の利点:対称鍵アルゴリズムの復号速度は非対称システムよりずっと速い 欠点:安全な鍵伝達メカニズム が必要である対称鍵アルゴリズムのタイプ DES AES SEED 等 非対称鍵暗号システム暗号鍵は復号鍵とは異なる である.公開鍵システム、 とも呼ばれる各ユーザは、独自の専用鍵と、利用可能な公開鍵のペアを有する 鍵は2個ずつであり、これは を意味する.公開鍵は秘密鍵 を認識できない.相手方公開鍵暗号化転送、相手方は秘密鍵で復号、コンテンツ転送 .
の利点:対称鍵割り当てよりも良い鍵割り当て 欠点:暗号化/復号化速度が対称鍵より遅い 非対称鍵アルゴリズムのタイプ Diffie-Helloman RSA ECC 等 Hash関数 Hash関数は一方向アルゴリズムです は暗号化されていますが、復号が不要な場合は を使用します.
プロパティ 圧縮(収縮):異なる長さの入力を固定長の出力に圧縮する関数 一方向(One-Way):コメントを暗号化してハッシュコードを取得できますが、ハッシュコードを使用してコメント を復元することはできません.効率:コメントからパスワード(ハッシュ値)まで、リソースと時間があまり必要ありません. Collision-free:メッセージが一意の場合、ハッシュ値も一意の です.
ハッシュ関数タイプ MD5 128ビット固定長結果値(16バイト) SHA-1 160ビット固定長結果値(20バイト) SHA-256 256ビット固定長結果値(32バイト) MD5 SHA(SHA-1、SHA-128、SHA-256等) 等 暗号化後にリカバリする必要があるデータについては、対称鍵/非対称鍵アルゴリズムを使用します. DBに記憶する個人情報 暗号化後、データを復元する必要がない場合はHash関数を使用します. DBに格納パスワード AOPによる暗号化
aop-context.xml
暗号化の基本要素
コメント(データ)
アルゴリズム(Algorithm)
鍵(key)
[コメント]->暗号化アルゴリズム+Key-><暗号文>
<暗号文>>復号アルゴリズム+Key>[コメント]
暗号システム
たいしょうキー暗号システム
aop-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
application-context.xml<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<import resource="/jdbc-Context.xml"/>
<import resource="/aop-Context.xml"/>
</beans>
SHA256Util Classpackage kr.or.iei.common;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.springframework.stereotype.Component;
@Component
public class SHA256Util {
public String encryptionData(String data, String salt) throws Exception {
MessageDigest mDigest = MessageDigest.getInstance("SHA-256");
String str=data+salt;
mDigest.update(str.getBytes());
byte[] encryptMsg = mDigest.digest(); // 암호화 처리한 값 리턴
StringBuffer hexString=new StringBuffer();
for(byte b : encryptMsg) {
hexString.append(String.format("%02X",b));
}
return hexString.toString();
}
}
MemberAOP Class@Aspect
@Component
public class MemberAOP {
@Autowired
private SHA256Util enc;
// 회원가입 암호화 처리 AOP 로직
@Pointcut("execution(int kr.or.iei.member.model.service.MemberServiceImpl.insertMember(..))")
public void insertMemberPointCut() {
}
@Before("insertMemberPointCut()")
public void insertMemberPasswordEncryption(JoinPoint jp) throws Exception {
Member m = (Member) jp.getArgs()[0];
String userPwd = m.getUserPwd();
String userId = m.getUserId();
String encryptPwd = enc.encryptionData(userPwd, userId);
m.setUserPwd(encryptPwd);
}
MemberController Class@Controller
public class MemberController {
@Autowired
private MemberService mService;
@RequestMapping(value = "/member/memberJoin.do", method = RequestMethod.POST)
public ModelAndView memberJoinus(Member m, ModelAndView mav) {
// view페이지 보낸 데이터 받는 방법
// 1. request 객체 사용 - request.getParameter();
// 2. @requestParam 사용 - ex) @requestParam String userId
// 3. VO를 활용하는 방법(서로 다른 여러 객체 사용 가능) - ex) 인자 값을 Member m 설정
int result = mService.insertMember(m);
if (result > 0) {
mav.addObject("msg", "회원 가입 성공");
mav.addObject("location", "/");
} else {
mav.addObject("msg", "회원 가입 실패 - 지속적인 문제 발생시 관리자에게 문의 -");
mav.addObject("location", "/member/joinPage.do");
}
mav.setViewName("member/msg");
return mav;
}
MemberService Interfacepublic interface MemberService {
int insertMember(Member m);
}
MemberServiceImpl Class@Service
public class MemberServiceImpl implements MemberService{
@Override
public int insertMember(Member m) {
return mDAO.insertMember(m);
}
}
MemberDAO Class@Repository
public class MemberDAO {
@Autowired
@Qualifier(value = "jdbcTemplate")
JdbcTemplate jdbc;
public int insertMember(Member m) {
String query="INSERT INTO MEMBER VALUES(MEMBER_SEQ.NEXTVAL, ?, ?, ?, ?, ?, SYSDATE, 'N')";
return jdbc.update(query, m.getUserId(), m.getUserPwd(), m.getUserName(), m.getAge(), m.getAddress());
}
}
Reference
この問題について([Spring]暗号学), 我々は、より多くの情報をここで見つけました https://velog.io/@woody_/Spring-암호학テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol