asp.net 에서 XML 의 암호 화 와 복호화 실현 방법

소개 하 다.
우 리 는 xml 를 암호 화 하 는 세 가지 방법 이 있다.
1.대칭 암호 화 방법 으로 만 xml 암호 화
이 암호 화 방법 은 하나의 키 만 사용 합 니 다.즉,암호 화 xml 이 든 복호화 xml 이 든 모두 같은 키 를 사용 합 니 다.이 키 는 암호 화 된 xml 에 저장 되 지 않 기 때문에 암호 화 와 복호화 과정 에서 이 키 를 불 러 오고 훔 치지 않도록 보호해 야 합 니 다.
2.대칭 암호 화 와 비대 칭 암호 화 를 결합 시 키 는 방법 으로 xml 를 암호 화 합 니 다.
이 방법 은 데 이 터 를 암호 화 하 는 대칭 키 와 이 대칭 키 를 보호 하 는 비대 칭 키 가 필요 합 니 다.암호 화 된 대칭 키 는 암호 화 된 데이터 와 함께 xml 문서 에 저 장 됩 니 다.개인 비대 칭 키 로 키 를 복호화 할 때 공개 비대 칭 키 로 키 를 암호 화해 야 합 니 다.
본문 은 바로 이런 방법 을 사용 할 것 이다.더 많은 방법 을 배우 고 싶 으 면 MSDN 을 참고 하여 더 많은 정 보 를 기다 리 세 요.
(번역자 주:비대 칭 암호 화 알고리즘 은 두 개의 키 가 필요 합 니 다.공개 키(publickey)와 개인 키(privatekey)입 니 다.공개 키 와 개인 키 는 한 쌍 입 니 다.공개 키 로 데 이 터 를 암호 화하 면 해당 하 는 개인 키 로 만 복호화 할 수 있 습 니 다.개인 키 로 데 이 터 를 암호 화하 면 공개 키 로 만 복호화 할 수 있 습 니 다.암호 화 와 복호화 가 서로 다른 키 를 사용 하기 때문에 이 알고리즘 을 비대 칭 암호 화 알고리즘 이 라 고 합 니 다.)
3.X.509 암호 화 xml 를 사용 합 니 다.이 방법 은 X.509 를 비대 칭 키 로 하고 VeriSign 과 같은 제3자 가 제공 합 니 다.
방법.
xml 암호 화가 어떻게 완성 되 든 암호 화 데 이 터 를 저장 하 는 데 는 항상 두 가지 방법 중 하나 입 니 다.
1.암호 화 된 모든 요 소 는라 고 명명 되 었 습 니 다.
2.암호 화 된 후에 데이터 만 교체 되 고 요소 의 이름 은 읽 을 수 있 으 며 변화 가 발생 하지 않 습 니 다.
이런 미묘 한 변 화 는 매우 중요 하 다.예 를 들 면:
xml 문서 에라 고 불 리 는 루트 요소 가 포함 되 어 있다 면,이 루트 요 소 는이 라 고 불 리 는 하위 요 소 를 저장 합 니 다.이 xml 를 보 내 고이라는 요 소 를 보호 하려 면 첫 번 째 방법 을 사용 하면로 대 체 됩 니 다.암호 화 된 문서 에서 읽 을 수 있 는 정 보 를 얻 지 못 합 니 다.
두 번 째 방법 을 사용 하면요 소 는 유지 되 고 데이터 로 만 암호 화 됩 니 다.이 문 서 를 얻 은 사람 은 이 요소 의 상세 한 정 보 를 알 수 없 지만 직원 에 게 일어 난 일이 있다 는 것 을 알 고 있다.또한요소 의 모든 속성 도 암호 화 되 지 않 습 니 다.
그래서 특별한 수요 가 없다 면 우 리 는 보통 첫 번 째 방법 을 사용한다..net 2.0 에서 Boolean 값 의 속성 을 수정 하면 어떤 방법 을 사용 할 지 매우 간단하게 선택 할 수 있 습 니 다.
xml 암호 화의 예
다음 xml 암호 화의 예 는 비대 칭 암호 법 을 사용 하여 xml 문서 의 author 요소 의 내용 을 암호 화하 고 author 요 소 를로 교체 합 니 다.
XML 문서:
XPath Queries on XmlDocument objects in .NET 1.1 This article covers the basics. Mr. George James [email protected]

XPath 표현 식 은/article/articleinfo/author 입 니 다.
암호 화 된 xml 문서:
XPath Queries on XmlDocument objects in .NET 1.1 This article covers the basics. This article does not cover. session r4f7SI1aZKSvibb… sGNhKqcSovipJdOFCFKYEEMRFd…

author 요소 와 하위 요 소 는 모두로 대 체 됩 니 다.또한 암호 화 알고리즘,키 등 다른 요소 도 포함 되 어 있 습 니 다.
요소
요소 의 트 리 구 조 를 자세히 살 펴 보면요소 에서 많은 하위 요 소 를 분해 한 것 을 발견 할 수 있 습 니 다.그 중에서요 소 는 xml 디지털 서명 의요소 와 같 습 니 다.

"EncryptedData 요소 가 포함 되 어 있 습 니 다."http://www.w3.org/2001/04/xmlenc#'네 임 스페이스 에서암호 화 된 데이터 의 루트 요소 입 니 다.
EncryptionMethod 요 소 는 암호 화 된 데이터 의 대칭 방법 을 지정 합 니 다.이 일 을 하려 면 w3 url 이 포 함 된 알고리즘 속성 을 사용 해 야 합 니 다-"http://www.w3.org/2001/04/xmlenc#aes256-cbc"는 데 이 터 를 AES(Rijndael)로 256 k 키 로 암호 화 했다 고 지적 했다.
KeyInfo 요 소 는 xml 디지털 서명 에서 왔 습 니 다.대칭 키 의 정 보 를 저장 하고 있 습 니 다.그 밖 에 이 요 소 는 더 많은 정 보 를 저장 할 수 있 습 니 다.
KeyInfo 요소 의 EncryptedKey 요소 와 하위 요 소 는 저 장 된 키 에 대한 정 보 를 포함 하고 있 습 니 다.
KeyInfo 의 EncryptionMethod 요소 에 포 함 된 비대 칭 암호 화 방법 은 대칭 키 를 암호 화 하 는 데 사 용 됩 니 다.이 일 을 하려 면 알고리즘 속성 을 w3 url 에 설정 해 야 합 니 다.예 를 들 면:"http://www.w3.org/2001/04/xmlenc#rsa-1_5"는 RSA 비대 칭 알고리즘 을 사용 하여 대칭 키 를 암호 화 했다 는 것 을 설명 한다.
키 Name 요 소 는 키 를 발견 하기 위 한 식별 자 입 니 다.잠시 후에 우리 가 프로 그래 밍 을 할 때 너 는 그것 의 중요성 을 발견 할 것 이다.
Cipherdata 요소 와 CipherValue 요 소 는 암호 데 이 터 를 포함 하고 있 습 니 다.사실 암호 데 이 터 는 CipherValue 요소 에 저 장 됩 니 다.EncryptedKey 요소 에 저 장 된 것 은 암호 화 된 키 이 고,EncryptedData 요소 에 저 장 된 CipherValue 는 암호 화 된 데 이 터 를 저장 합 니 다.
비대 칭 xml 암호 화 절차
xml 암호 화 과정 은 다음 과 같은 5 단계 로 요약 할 수 있 습 니 다.
1.xml 문서 의 요 소 를 선택 하 십시오(루트 요 소 를 선택 하면 전체 문 서 를 암호 화 합 니 다)
2.대칭 키 암호 화 요 소 를 사용 합 니 다.
3.비대 칭 암호 화 를 사용 하여 위의 대칭 키 를 암호 화 합 니 다(공개 키 사용)
4.암호 화 된 데이터 와 암호 화 된 키 를 포함 하 는 EncryptedData 요 소 를 만 듭 니 다.
5.암호 화 된 요소 로 초기 요 소 를 교체 합 니 다.
이 절차 의 대부분 은.net 2.0 의 클래스 를 사용 하여 자동 으로 완성 할 수 있다.
비대 칭 xml 복호화 절차
xml 복호화 과정 은 다음 과 같은 네 단계 로 요약 할 수 있 습 니 다.
1.xml 문서 에서 EncryptedData 요 소 를 선택 하 십시오.
2.비대 칭 키 를 사용 하여 키 를 복호화 합 니 다(개인 키 사용)
3.암호 화 되 지 않 은 키 로 데 이 터 를 복호화 합 니 다.
4.EncryptedData 요 소 를 암호 화 되 지 않 은 요소 로 바 꿉 니 다.
이 절차 의 대부분 은.net 2.0 의 클래스 를 사용 하여 자동 으로 완성 할 수 있다.
네 임 스페이스
xml 암호 화 를 완료 하려 면 세 개의 네 임 스페이스 를 도입 해 야 합 니 다.
System.Xml-조작 xml 을 포함 하 는 클래스
System.security.Cryptography-암호 화 키 생 성 을 포함 하 는 클래스
System.security.Cryptography.Xml-암호 화 작업 을 수행 하 는 클래스 포함
.net 암호 화 xml 사용 하기
본 고 는 간단 한 암호 화,복호화 xml 프로그램 을 제공 합 니 다.다음은 관련 코드 를 살 펴 보 겠 습 니 다.이 예 는 기본 적 인 기능 만 있 을 뿐,너 는 노드 를 선택 하 는 것 과 같은 기능 을 추가 할 수 있다.
우선 비대 칭 공개 키 를 불 러 와 키 를 암호 화 합 니 다.
//암호 화 키 에 사용 할 비대 칭 키 를 만 듭 니 다 RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();/공개 키 XmlDocument pubKeys=new XmlDocument()불 러 오기;pubKeys.Load(Application.StartupPath + "\\xml.dev.keys.public"); // 공개 키 암호 화 키 rsa.FromXmlString(pubKeys.OuterXml)사용 하기;
다음은 xml 문 서 를 불 러 오고 암호 화 할 노드 를 선택 하 십시오.다음 코드 는 노드 를 선택 하기 위해 XPath 표현 식 을 사용 하 는 방법 을 보 여 줍 니 다.노드 를 선택 하지 않 으 면 xml 문서 전체 가 암호 화 됩 니 다.
//xml 문서 this.xmlEncDoc=new XmlDocument();/xml 문서 에 노드 와 데 이 터 를 불 러 옵 니 다(생략)XmlElement encElement;/xpath 가 없 으 면 if(xpath==string.Empty){encElement=this.xmlEncDoc.DocumentElement;}else { XmlNamespaceManager xmlns = this.xmlCntrlr.xmlnsManager; // xpath 를 통 해 암호 화 할 요소 encElement=this.xmlEncDoc.SelectSingleNode(xpath,xmlns)as XmlElement;}
데이터 와 키 를 암호 화 하려 면 EncryptedXml 클래스 를 사용 하 십시오.
//암호 화 xml 클래스 를 완료 한 EncryptedXml xmlEnc=new EncryptedXml(this.xmlEncDoc);/"session"키 를 추가 하고 rsa 인 코딩 xmlEnc.AddKeyNameMapping("session",rsa)을 사용 합 니 다./"session"키 를 사용 하여 데 이 터 를 암호 화 합 니 다./이 정 보 는 KeyInfo 요소 에서 암호 화 된 Data encData=xmlEnc.Encrypt(encElement,"session")에 저 장 됩 니 다.
초기 요 소 를 암호 화 된 요소 로 대체 합 니 다.
//암호 화 된 요소 로 초기 요소 인 EncryptedXml.ReplaceElement(encElement,encData,false)를 대체 합 니 다.
.net 복호화 xml 사용 하기
우선 개인 비대 칭 키 를 불 러 와 서 키 를 복호화 합 니 다.
//키 복호화 에 사용 할 비대 칭 키 를 만 듭 니 다 RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();/개인 키 XmlDocument pribKeys=new XmlDocument()를 불 러 옵 니 다.privKeys.Load(Application.StartupPath + "\\xml.dev.keys.private"); // 개인 키 를 사용 하여 키 rsa.FromXmlString(privKeys.OuterXml)을 복호화 합 니 다.암호 화 된 문서 에 키 이름 을 추가 하고 매 핑 합 니 다.//암호 화 된 문서 에 키 이름 을 추가 하고 매 핑 합 니 다.EncryptedXml encXml=new EncryptedXml(xmlEncdoc);encXml.AddKeyNameMapping("session", rsa); 지정 한 키 를 통 해 문서 의 모든 EncryptedData 요소//모든요소 encXml.DecryptDocument()을 복호화 합 니 다.
총결산
xml 암호 화(XML Encryption)는 w3c 암호 화 xml 의 표준 입 니 다.암호 화 된 문 서 는 여전히 xml 형식 입 니 다.저 희 는 비대 칭 과 대칭 알고리즘 을 사용 하여 xml 를 암호 화 합 니 다.대칭 알고리즘 은 데 이 터 를 암호 화 하 는 데 사 용 됩 니 다.비대 칭 알고리즘 은 대칭 알고리즘 의 키 를 암호 화 하 는 데 사 용 됩 니 다.암호 화 된 데 이 터 는 EncryptedData 요소 에 저 장 됩 니 다.EncryptedData 요 소 는 알고리즘 을 설명 하 는 하위 요 소 를 포함 하 는 동시에 키 정보 도 포함 합 니 다.

좋은 웹페이지 즐겨찾기