SpringBoot api 암호 화 구현 예시 코드
12538 단어 SpringBootapi암호 화
프로젝트 에서 데이터 의 안전 을 확보 하기 위해 저 희 는 전 달 된 데 이 터 를 암호 화 합 니 다.자주 사용 하 는 암호 화 알고리즘 은 대칭 암호 화(AES)와 비대 칭 암호 화(RSA)를 포함 하고 블 로 거들 은 코드 클 라 우 드 에서 가장 간단 한 API 암호 화 항목 을 선택 하여 다음 과 같은 설명 을 한다.
다음은 저희 의 가장 밝 은 아 이 템 을 드 리 겠 습 니 다.
rsa-encrypt-body-spring-boot
프로젝트 소개
이 항목 은 RSA 암호 화 방식 으로 API 인터페이스 에서 되 돌아 오 는 데 이 터 를 암호 화하 여 API 데 이 터 를 더욱 안전하게 합 니 다.다른 사람 은 제 공 된 데 이 터 를 해독 할 수 없다.Spring Boot 인터페이스 암호 화 는 반환 값,매개 변수 값 을 주석 을 통 해 자동 으로 복호화 할 수 있 습 니 다.
RSA 암호 화 란 무엇 입 니까?
우선 저 희 는 당연히 RSA 암호 화 를 알 고 있 습 니 다.
RSA 암호 화 는 비대 칭 암호 화 이다.키 를 직접 전달 하지 않 은 상태 에서 복호화 할 수 있 습 니 다.이것 은 정보의 안전성 을 확보 하고 키 를 직접 전달 하 는 데 발생 하 는 해 결 될 위험 을 피 할 수 있다.한 쌍 의 키 로 복호화 하 는 과정 으로 각각 공개 키 와 비밀 키 라 고 합 니 다.이들 사이 에 수학 과 관련 이 있 는데 이 암호 화 알고리즘 의 원 리 는 바로 큰 정수 에 대해 인수 분해 의 어려움 을 해결 하여 안전성 을 확보 하 는 것 이다.보통 개인 이 비밀 키 를 저장 하고 공개 키 는 공개 적 입 니 다(여러 사람 이 동시에 가지 고 있 을 수 있 습 니 다).
예 를 들다.
암호 화 와 서명 은 모두 안전성 을 고려 한 것 이지 만 약간 다르다.암호 화 와 서명 은 비밀 키 를 사용 하 느 냐,공개 키 를 사용 하 느 냐 는 질문 이 자주 있 습 니 다.사실은 암호 화 와 서명 의 역할 이 헷 갈 리 는 것 이다.쉽게 말 하면 암호 화 는 정보 가 유출 되 는 것 을 방지 하기 위 한 것 이 고 서명 은 정보 가 왜곡 되 는 것 을 방지 하기 위 한 것 이다.여기에 두 가지 예 를 들 어 설명 한다.
첫 번 째 장면:전장에서 B 는 A 에 게 어떤 지령 을 전달 해 야 한다.
RSA 의 암호 화 과정 은 다음 과 같 습 니 다.
(1)A 는 한 쌍 의 키(공개 키 와 비밀 키)를 생 성하 고 비밀 키 는 공개 하지 않 으 며 A 는 스스로 보류한다.공개 키 는 공개 적 으로 누구나 얻 을 수 있 습 니 다.
(2)A 는 자신의 공개 키 를 B 에 게 전달 하고 B 는 A 의 공개 키 로 메 시 지 를 암호 화 한다.
(3)A 는 B 암호 화 된 메 시 지 를 받 고 A 자신의 비밀 키 를 이용 하여 메 시 지 를 복호화 한다.
이 과정 에서 2 차례 전달 과정 만 있 었 고,1 차 는 A 가 B 에 게 공개 키 를 전달 하고,2 차 는 B 가 A 에 게 암호 화 메 시 지 를 전달 해 모두 적 에 게 포 착 됐 더 라 도 위험성 이 없 었 다.A 의 비밀 키 만 이 정 보 를 복호화 해 정보 내용 의 유출 을 막 을 수 있 었 기 때문이다.
**두 번 째 장면:**A 는 B 가 보 낸 메 시 지 를 받 은 후"받 았 습 니 다"라 고 답 해 야 합 니 다.
RSA 서명 과정 은 다음 과 같 습 니 다.
(1)A 는 한 쌍 의 키(공개 키 와 비밀 키)를 생 성하 고 비밀 키 는 공개 하지 않 으 며 A 는 스스로 보류한다.공개 키 는 공개 적 으로 누구나 얻 을 수 있 습 니 다.
(2)A 는 자신의 비밀 키 로 메시지 에 서명 을 하고 서명 을 형성 하 며 추가 한 메시지 와 메시지 자 체 를 함께 B 에 게 전달한다.
(3)B 가 메 시 지 를 받 은 후에 A 의 공개 키 를 가 져 와 검 사 를 하고 검 사 된 내용 이 메시지 자체 와 일치 하면 메시지 가 A 가 답장 한 것 임 을 증명 한다.
이 과정 에서 2 차례 전달 과정 만 있 었 고,1 차 는 A 가 가서명 한 메시지 와 메시지 자 체 를 B 에 게 전달 하고,2 차 는 B 가 A 의 공개 키 를 획득 해 모두 적 에 게 나포 되 더 라 도 위험성 이 없 었 다.A 의 비밀 키 만 이 메시지 에 서명 할 수 있 었 고,메시지 내용 을 알 았 더 라 도 서명 이 있 는 회신 을 B 에 게 위조 해 메시지 내용 변경 을 막 을 수 없 었 기 때문이다.
그러나 두 장면 을 종합해 보면 첫 번 째 장면 은 캡 처 된 정보 가 누설 되 지 않 았 지만 캡 처 한 공개 키 를 이용 하여 가짜 명령 을 암호 화하 여 A 에 게 전달 할 수 있다.두 번 째 장면 에서 캡 처 한 정 보 는 변경 되 지 않 지만 메시지 의 내용 은 공개 키 검 사 를 통 해 얻 을 수 있 고 유출 을 방지 할 수 없다.따라서 실제 응용 에서 상황 에 따라 사용 해 야 하고 암호 화 와 서명 도 동시에 사용 할 수 있다.예 를 들 어 A 와 B 는 모두 자신의 공개 키 와 비밀 키 를 가지 고 있다.A 가 B 에 게 메 시 지 를 보 내 려 고 할 때 먼저 B 의 공개 키 로 메 시 지 를 암호 화 한 다음 에 암호 화 된 메 시 지 를 A 의 비밀 키 로 서명 하면 누설 되 지 않 고 변경 되 지 않 으 며 메시지 의 안전성 을 확보 할 수 있다.
암호 화 실전
블 로 거들,삐걱삐걱 이렇게 많은 데,나 는 RSA 가 무엇 을 하 는 지 이미 알 고 있다.공개 키 암호 화,비밀 키 복호화,비밀 키 서명,공개 키 검사 서명 이 아 닙 니 다.
실전 준비
1.springboot 프로젝트 새로 만 들 기
springboot_api_encryption
2.maven 의 래 도입
<dependency>
<groupId>cn.shuibo</groupId>
<artifactId>rsa-encrypt-body-spring-boot</artifactId>
<version>1.0.1.RELEASE</version>
</dependency>
3.시작 클래스 애플 리 케 이 션 에@EnableSecurity 주석 추가
@SpringBootApplication
@EnableSecurity
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
4.application.yml 또는 application.properties 에 RSA 공개 키 와 비밀 키 를 추가 합 니 다.공개 키 비밀 키 생 성 글 뒤에 생 성 도구 가 나 옵 니 다.
rsa:
encrypt:
open: false # true or false
showLog: true # log true or false
publicKey: # RSA
privateKey: # RSA
5.Controller 안의 API 방법 을 암호 화 합 니 다.
@Encrypt
@GetMapping("/encryption")
public TestBean encryption(){
TestBean testBean = new TestBean();
testBean.setName("shuibo.cn");
testBean.setAge(18);
return testBean;
}
6.전 달 된 암호 화 매개 변수 복호화다른 자바 엔 드 프로그램 은 주 해 를 사용 할 수 있 습 니 다.vue 라면 RSA 키 로 복호화 하 십시오.
@Decrypt
@PostMapping("/decryption")
public String Decryption(@RequestBody TestBean testBean){
return testBean.toString();
}
진짜 칼 과 진짜 총1.maven 도입
2.시작 클래스 에 주석 추가
3.YML 설정 키 추가
4.실체 클래스 만 들 기
5.대외 API 인터페이스 작성
6.시작 항목
요청 주소:http://localhost:8080/encryption
우 리 는 돌아 오 는 데이터 가 암호 화 되 지 않 은 것 을 보 았 다.
7.수정
open 을 true 로 변경 하여 암호 화 열기
rsa:
encrypt:
open: true # true or false
showLog: true # log true or false
publicKey: # RSA
privateKey: # RSA
8.프로젝트 재 부팅요청 주소:http://localhost:8080/encryption
우 리 는 돌아 온 데이터 가 암호 화 된 것 을 보 았 다.
9.암호 화 로그
비밀 해제 실전
다른 spring boot 프로젝트 라면 앞 과 같 습 니 다.클 라 이언 트 가 springboot 프로젝트 라 고 생각 하고 다른 것 은 RSA 복호화 프로 토 콜 을 사용 하여 복호화 하 십시오!
서버 에 개인 키,공공 키 가 있 습 니 다.
프론트 엔 드 는 공개 키 만 있 으 면 됩 니 다.
실전 준비
원래 springboot 에 복호화 방법 을 쓰 세 요.
1.전단 js 복호화 방법
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jsencrypt/3.0.0-rc.1/jsencrypt.js"></script>
2.백 스테이지 복호화 방법 추가
/**
*
* @param user
* @return
*/
@PostMapping("/decryption")
@Decrypt
@ResponseBody
public String Decryption(@RequestBody User user){
System.out.println(user.toString());
return user.toString();
}
3.js 방법
#
var PUBLIC_KEY = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAobhGH4WMwMvJRUlTxWrCVIOQtsHijAxPJNvAWAgq80ADpFEWrpbcGB9cKqp6XHRH4k/CVtCUZ7jm9UKwhaeAm18sKtcwe+M8JFNX6FSHpgde0o8C9S/QpcmLxf4iN7nGZ7P3ZTvMdmKUcdRMsVQnsydG2Bj6gRxP2+kexEebTeODbdM7dHlkxAL0RxGWmX/ZOBzsoWZw2gKcC0vxwyIZBGHUdImG2T3nEA+VMfK2Yqv3uSYukmlKP+0mjfhrTtLFDuTV1VER9BfryBMvpQCxLO4pqgZnXPd+SOQcZHZ2OL0wqo5OX1+GPYx7TNxz5Qi76pK//T2mH7s6X/BuyT21HQIDAQAB';
/**
*
* @returns {PromiseLike<ArrayBuffer>}
* @constructor
*/
function RSA_encryption(jsonData) {
var encrypt = new JSEncrypt();
encrypt.setPublicKey('-----BEGIN PUBLIC KEY-----' + PUBLIC_KEY + '-----END PUBLIC KEY-----');
var encrypted = encrypt.encrypt(JSON.stringify(jsonData));
console.log(' :%o', str);
console.log(' :%o', encrypted);
return encrypted;
}
/**
*
*/
function tijiao() {
var str = {
"name":"1223334",
"password":"asd",
age:1
};
$.ajax({
url: "/decryption",
type : "POST",
contentType: "application/json;charset=utf-8",
data : RSA_encryption(str) ,
success : function(data) {
alert(data);
}
})
}
진짜 칼 과 진짜 총1.Controller 복호화 방법 인터페이스 추가
2.전단 페이지 도입 js 및 방법
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
,
<button id="jiami" onclick="tijiao()"> </button>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jsencrypt/3.0.0-rc.1/jsencrypt.js"></script>
<script>
var PUBLIC_KEY = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAobhGH4WMwMvJRUlTxWrCVIOQtsHijAxPJNvAWAgq80ADpFEWrpbcGB9cKqp6XHRH4k/CVtCUZ7jm9UKwhaeAm18sKtcwe+M8JFNX6FSHpgde0o8C9S/QpcmLxf4iN7nGZ7P3ZTvMdmKUcdRMsVQnsydG2Bj6gRxP2+kexEebTeODbdM7dHlkxAL0RxGWmX/ZOBzsoWZw2gKcC0vxwyIZBGHUdImG2T3nEA+VMfK2Yqv3uSYukmlKP+0mjfhrTtLFDuTV1VER9BfryBMvpQCxLO4pqgZnXPd+SOQcZHZ2OL0wqo5OX1+GPYx7TNxz5Qi76pK//T2mH7s6X/BuyT21HQIDAQAB';
/**
*
* @returns {PromiseLike<ArrayBuffer>}
* @constructor
*/
function RSA_encryption(jsonData) {
var encrypt = new JSEncrypt();
encrypt.setPublicKey('-----BEGIN PUBLIC KEY-----' + PUBLIC_KEY + '-----END PUBLIC KEY-----');
var encrypted = encrypt.encrypt(JSON.stringify(jsonData));
console.log(' :%o', jsonData);
console.log(' :%o', encrypted);
return encrypted;
}
/**
*
*/
function tijiao() {
var str = {
"name":"1223334",
"password":"asd",
age:1
};
$.ajax({
url: "/decryption",
type : "POST",
contentType: "application/json;charset=utf-8",
data : RSA_encryption(str) ,
success : function(data) {
alert(data);
}
})
}
</script>
</body>
</html>
3.접근 시작http://localhost:8080
4.배경 복호화 로그
총결산
위의 인터페이스 암호 화 복호화 작업 을 거 쳤 습 니 다.우리 의 인터페이스 가 공개 키 가 없 거나 비밀 키 가 없 으 면 다른 사람 이 복호화 할 수 없다 는 것 을 알 수 있 습 니 다!이렇게 하면 API 인터페이스 에 좋 은 보호 역할 을 하여 다른 사람 이 가방 을 잡 는 것 을 방지 합 니 다!
모두:매일 조금씩 배우 고 기술 의 성장 이 빠 르 기 를 바 랍 니 다.
프로젝트 구덩이
이 프로젝트 의 demo 에 접근 할 수 없습니다.어 려 운 점 은 전단 에서 어떻게 암호 화하 여 백 스테이지 로 전송 하여 복호화 하 는 지 입 니 다.이 구 덩이 는 제 가 여러분 을 데 리 고 기어 나 왔 습 니 다!
다음은 아이디어 사항 입 니 다.
1.아이디어 ajax 의 contentType:"application/json;charset=utf-8”
$.ajax({
url: "/decryption",
type : "POST",
contentType: "application/json;charset=utf-8",
data : RSA_encryption(str) ,
success : function(data) {
alert(data);
}
})
2、복호화 방법 은@RequestBody
@PostMapping("/decryption")
@Decrypt
@ResponseBody
public String Decryption(@RequestBody User user){
System.out.println(user.toString());
return user.toString();
}
소스 코드 가 져 오기:https://github.com/pengziliu/GitHub-code-practice
SpringBoot 가 api 암호 화 를 실현 하 는 예제 코드 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 SpringBoot api 암호 화 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 저 희 를 많이 사랑 해 주세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.