이 기사에서는 주로 Java 중요 정보 암호화 처리 관련 지식을 소개합니다. 1) 민감한 정보 암호화 처리를 위해 구현하려는 내용 2) 민감한 정보 암호화 처리를 위해 수행한 작업 3) 민감한 정보 암호화 구현 방법 . 매우 좋은 참조 값을 가지고 있습니다.
1. 민감한 정보를 암호화할 때 무엇을 얻고자 합니까?
사용자를 민감하게 만들어야 합니다. 정보는 암호화되며, 민감한 정보마다 암호화 요구 사항이 다릅니다.
예를 들어 비밀번호를 암호화할 때 되돌릴 필요가 없는 경우가 많습니다. 사용자가 비밀번호를 입력한 후 시스템의 암호화 규칙을 사용하여 암호화된 비밀번호와 저장된 비밀번호를 직접 비교하여 비교 결과를 얻으면 사용자 로그인 정보의 정당성을 입증할 수 있습니다.
그리고 때로는 데이터베이스 제거로 인한 데이터 유출을 방지하기 위해 일부 민감한 정보(예: ID 번호, 휴대폰 번호)를 암호화해야 합니다. 이러한 데이터는 암호화되어야 할 뿐만 아니라 디스플레이 및 기타 비즈니스 시나리오에서 완전히 표시되거나 가려져야 하므로 암호화된 콘텐츠를 해독해야 합니다.
2. 민감한 정보를 암호화하기 위해 어떤 조치를 취했습니까?
최근 이 요구 사항을 충족하기 위해 프로젝트에서 몇 가지 간단한 디자인이 만들어졌습니다.
참고: 여기서는 프로덕션 데이터 유지시 쿼리의 편의성을 고려하여 aes 암호화 방식을 사용합니다. 암호화 방식은 mysql의 aes 암호화 결과와 동일하므로 hex를 직접 사용해도 됩니다. 쿼리를 위한 SQL의 aes_encrypt 함수 비밀 솔트를 구성 파일에 저장할 수 있습니다.
1. po의 각 클래스에서 암호화 및 해독이 필요한 필드에 이 주석을 추가할 수 있습니다.
2. . 메소드 구현 Java 리플렉션 및 사용자 정의 주석 사용
3. 암호화 및 해독이 필요한 모든 엔터티 객체는 기본 클래스에서 상속되어야 합니다
4. 암호화 메소드는 엔터티 클래스가 호출될 때 호출됩니다. 암호화되어 있으며, decrypt 메소드를 복호화할 때 encrypt 메소드를 호출하여 객체 내 민감한 데이터의 암호화 및 복호화를 구현할 수 있습니다
3. 민감정보 암호화 구현
1. 먼저 효과 살펴보기
주의사항 매우 명확합니다. 먼저 개체의 ID 번호를 설정한 다음 자체 암호화 방법을 실행하고 자체 참조를 반환하고 개체의 암호화된 json문자열을 인쇄하여 자체 암호 해독을 실행합니다. 메서드를 사용하여 자체 참조를 반환하고 개체의 해독된 json 문자열을 인쇄합니다.
2. 디자인 구현 구조
crypt | |--annotation | |--DecryptFiled | |--EncryptFiled |--crypt | |--EncryptDecryptInterface |--domain | |--BaseInfo | |--SimpleDomain |--utils | |--MySqlUtils
2.1 Annotation 구현 먼저 살펴보기
/** * Created by bright on 2017/2/22. * * @author : */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface EncryptFiled { String value() default ""; } 自定义注解
두 주석의 구현은 일관되고 주석 이름만 다를 뿐이며 다른 주석의 코드는 게시되지 않습니다.
2.2 자체 암호화 및 자체 복호화 인터페이스 정의
기본 클래스는 이 인터페이스에서 자체 암호화 및 자체 복호화 방법을 구현합니다
/** * Created by bright on 2017/2/22. * * @author : */ public interface EncryptDecryptInterface { public <T> T encryptSelf(); public <T> T decryptSelf(); } 自定义接口
2.3 MysqlUtils 구현
/** * Created by bright on 2017/2/22. * * @author : */ @Component public class MySqlUtils { private static final String ENCRYPTTYPE= "AES";//加密方式 private static final String ENCODING = "UTF-8";//加密时编码 private static String MYSQLUTILSKEY = "aaa";//加密密盐 private static MySqlUtils mysqlUtils;//单例 private static Cipher encryptCipher ;//加密cipher private static Cipher decryptChipher;//解密chipher /** * 该方法可用在spring项目中使用配置文件设置密盐,默认值为123 * @param key */ @Value("${mysql.column.crypt.key:123}") public void setMysqlutilskey(String key){ MySqlUtils.MYSQLUTILSKEY = key; } /** * encryptCipher、decryptChipher初始化 */ public static void init(){ try { encryptCipher = Cipher.getInstance(ENCRYPTTYPE); decryptChipher = Cipher.getInstance(ENCRYPTTYPE); encryptCipher.init(Cipher.ENCRYPT_MODE, generateMySQLAESKey(MYSQLUTILSKEY, ENCODING)); decryptChipher.init(Cipher.DECRYPT_MODE, generateMySQLAESKey(MYSQLUTILSKEY, ENCODING)); } catch (InvalidKeyException e) { throw new RuntimeException(e); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } catch (NoSuchPaddingException e) { throw new RuntimeException(e); } } /** * 单例获取方法实现 * @return */ public synchronized static MySqlUtils getInstance(){ if(mysqlUtils == null){ mysqlUtils = new MySqlUtils(); init(); } return mysqlUtils; } /** * 加密算法 * @param encryptString * @return */ public String mysqlAESEncrypt(String encryptString) { try{ return new String(Hex.encodeHex(encryptCipher.doFinal(encryptString.getBytes(ENCODING)))).toUpperCase(); } catch (BadPaddingException e) { throw new RuntimeException(e); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } catch (IllegalBlockSizeException e) { throw new RuntimeException(e); } } /** * 解密算法 * @param decryptString * @return */ public String mysqlAESDecrypt(String decryptString){ try { return new String(decryptChipher.doFinal(Hex.decodeHex(decryptString.toCharArray()))); } catch (DecoderException nspe) { throw new RuntimeException(nspe); } catch (BadPaddingException nsae) { throw new RuntimeException(nsae); } catch (IllegalBlockSizeException ike) { throw new RuntimeException(ike); } } /** * 产生mysql-aes_encrypt * @param key 加密的密盐 * @param encoding 编码 * @return */ public static SecretKeySpec generateMySQLAESKey(final String key, final String encoding) { try { final byte[] finalKey = new byte[16]; int i = 0; for(byte b : key.getBytes(encoding)) finalKey[i++%16] ^= b; return new SecretKeySpec(finalKey, "AES"); } catch(UnsupportedEncodingException e) { throw new RuntimeException(e); } } } MysqlUtils
2.4 BaseInfo 클래스 구현
/** * Created by bright on 2017/2/22. * * @author : */ public class BaseInfo implements Cloneable, EncryptDecryptInterface { /** * 拷贝一个对象,并对新对象进行加密 * 该方法主要用在日志打印上,可防止原对象被加密而影响程序执行 * @param <T> * @return */ public <T extends BaseInfo> T cloneAndEncrypt() { T cloneT = null; try { cloneT = (T) this.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); return null; } if(cloneT !=null) return cloneT.encryptSelf(); throw new RuntimeException("拷贝对象异常"); } /** * 重写clone方法 * @return * @throws CloneNotSupportedException */ @Override protected Object clone() throws CloneNotSupportedException { try { return super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); return null; } } /** * 实现自加密 * * @param <T> * @return */ public <T> T encryptSelf() { Field[] declaredFields = this.getClass().getDeclaredFields(); try { if (declaredFields != null && declaredFields.length > 0) { for (Field field : declaredFields) { if (field.isAnnotationPresent(EncryptFiled.class) && field.getType().toString().endsWith("String")) { field.setAccessible(true); String fieldValue = (String) field.get(this); if (StringUtils.isNotEmpty(fieldValue)) { field.set(this, MySqlUtils.getInstance().mysqlAESEncrypt(fieldValue)); } field.setAccessible(false); } } } } catch (IllegalAccessException e) { throw new RuntimeException(e); } return (T) this; } /** * 实现自解密 * * @param <T> * @return */ public <T> T decryptSelf() { Field[] declaredFields = this.getClass().getDeclaredFields(); try { if (declaredFields != null && declaredFields.length > 0) { for (Field field : declaredFields) { if (field.isAnnotationPresent(DecryptFiled.class) && field.getType().toString().endsWith("String")) { field.setAccessible(true); String fieldValue = (String)field.get(this); if(StringUtils.isNotEmpty(fieldValue)) { field.set(this, MySqlUtils.getInstance().mysqlAESDecrypt(fieldValue)); } } } } } catch (IllegalAccessException e) { throw new RuntimeException(e); } return (T) this; } } BaseInfo
2.5 간단한 객체
/** * Created by bright on 2017/2/22. * * @author : */ public class SimpleDomain extends BaseInfo{ @EncryptFiled @DecryptFiled private String id; public String getId() { return id; } public void setId(String id) { this.id = id; } } SimpleDomain
2.6 전화 걸기
public class Client { @Test public void test(){ SimpleDomain sd = new SimpleDomain();//要进行加密解密的实体类 sd.setId("6029131988005021537");//注入身份证号 System.out.println(JSON.toJSONString(sd.encryptSelf()));//执行自加密后输出 System.out.println(JSON.toJSONString(sd.decryptSelf()));//执行自解密后输出 } } Client
위 내용은 Java 민감정보 암호화 처리를 위한 샘플 코드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Java는 플랫폼 별 문제를 어떻게 완화합니까? Java는 JVM 및 표준 라이브러리를 통해 플랫폼 독립성을 구현합니다. 1) Bytecode 및 JVM을 사용하여 운영 체제 차이를 추상화합니다. 2) 표준 라이브러리는 Paths 클래스 처리 파일 경로 및 Charset 클래스 처리 문자 인코딩과 같은 크로스 플랫폼 API를 제공합니다. 3) 최적화 및 디버깅을 위해 실제 프로젝트에서 구성 파일 및 다중 플랫폼 테스트를 사용하십시오.

java'splatformincendenceenhancesmicroservicesarchitectureDeploymentFlexibility, 일관성, 확장 성 및 포트 가능성

Graalvm은 Java의 플랫폼 독립성을 세 가지 방식으로 향상시킵니다. 1. 교차 언어 상호 운용성, Java는 다른 언어와 원활하게 상호 작용할 수 있습니다. 2. 독립적 인 런타임 환경, Java 프로그램을 GraalvMnativeImage를 통해 로컬 실행 파일로 컴파일합니다. 3. 성능 최적화, Graal Compiler는 Java 프로그램의 성능과 일관성을 향상시키기 위해 효율적인 기계 코드를 생성합니다.

ToEffectIallyTestJavaApplicationSforplatformcompatibility, followthesesteps : 1) setupAutomatedTestingAcrossMultiplePlatflatformsUsingCitools likeJenkinsorgitHubactions.2) 행동 관리자는 realHardwaretoCathissesnotfoundInvironmentments.3) Checkcross-Pla

Java Compiler는 소스 코드를 플랫폼 독립적 인 바이트 코드로 변환하여 Java의 플랫폼 독립성을 실현하여 JVM이 설치된 JVM 프로그램에서 모든 운영 체제에서 실행할 수 있습니다.

Bytecodeachievesplatformincendence는 executedbirtualmachine (vm)을 beenecutedbyavirtmachine (vm)을 허용합니다

Java는 100% 플랫폼 독립성을 달성 할 수 없지만 플랫폼 독립성은 JVM 및 바이트 코드를 통해 구현되어 코드가 다른 플랫폼에서 실행되도록합니다. 특정 구현에는 다음이 포함됩니다. 1. 바이트 코드로의 컴파일; 2. JVM의 해석 및 실행; 3. 표준 라이브러리의 일관성. 그러나 JVM 구현 차이, 운영 체제 및 하드웨어 차이, 타사 라이브러리의 호환성은 플랫폼 독립성에 영향을 줄 수 있습니다.

Java는 "Writ 2. 유지 보수 비용이 낮 으면 하나의 수정 만 필요합니다. 3. 높은 팀 협업 효율성은 높고 지식 공유에 편리합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

드림위버 CS6
시각적 웹 개발 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구
