2009-09-13 3 views
15

CCCrypt (AES256)와 일반 텍스트 키를 사용하여 입력 된 NSString을 암호화하는 iPhone 앱이 있습니다. 문자열과 키는 NSData 객체를 반환하는 암호화 메서드에 제공됩니다.obj-c에서 NSString에 암호화 된 NSData?

요청 '데이터'암호화 된 문자열 데이터가 같이있는 NSString을 제공하다 [데이터 설명] : 나는있는 NSString 해당 변환 할 때 "<이 0b368353이 a707e7de 3eee5992 ee69827e e3603dc2 b0dbbc0b 861ca87d f39ce72a>"하지만, 내가 얻을 "(없는)".

동일한 일반 텍스트 키를 사용하여 원래 문자열로 해독하는 데 사용할 수있는 NSString을 사용자에게 반환해야합니다. NSData 객체의 'description'속성이 문자열을 반환 할 수 있다면 NSData 객체에서 "(null)"을 가져 오지 않고 NSString을 생성 할 수있는 방법이 있습니까?

업데이트 : Quinn에게 누가 Base64 인코딩을 사용하여 혼란스런 문자열을 생성 할 것을 제안합니다. 내가 아는 바로는 Base64 인코딩은 단순히 문자를 교환하지는 않지만 문자 교환은 위치에 따라 다르므로 괜찮습니다.

내 유일한 관심사는 '암호문'을 사용하여 메시지를 암호화하고 싶고 난잡한 문자열을 해독해야 할 때 동일한 암호를 입력해야한다는 것입니다. 누구나이를 구현할 수있는 방법을 제안 할 수 있습니까?

+0

아래에서이 문제를 해결하기 위해 내 답변이 업데이트되었습니다. 당신은 맞습니다. Base64는 대체 알고리즘이 아닙니다. 기본적으로 3 바이트를 4 바이트로 확장하므로 인코딩 된 데이터는 인코딩되지 않은 데이터의 1.37 배에 해당합니다. 기본적으로 3 개의 8 비트 청크를 가져 와서 4 개의 6 비트 청크로 다시 분해 한 다음 각각을 ASCII로 쉽게 표현할 수있는 8 비트 청크로 재 해석합니다. Wikipedia에 대한 자세한 내용이 있습니다. –

답변

32

우선, 을 사용하지 마십시오. 이러한 목적으로 NSString을 생성하려면 -[NSData description]을 사용하십시오. (-description을 디버깅 출력으로 처리하는 것이 가장 좋습니다. my previous answer이 잘못된 경우 사과 드리며 NSData를 암호화하고 해독 할 수 있음을 보여주는 설명을 인쇄했습니다.) 대신 NSString의 -dataUsingEncoding:-initWithData:encoding: 메서드를 사용하여 NSData와 NSString을 변환합니다. 이 경우에도 AES로 암호화 된 데이터는 그대로 문자열로 변환되지 않습니다. 일부 바이트 시퀀스는 제대로 재생되지 않으므로 문자열을 만들기 전에 데이터를 인코딩하는 것이 좋습니다.

Base64 데이터는 항상 ASCII 문자열로 표시 될 수 있으므로 Base64 encoding NSData를 사용해 보시기 바랍니다. (당신이 그렇게 할 때 물론, 당신은 해독하기 전에 Base64로에서 디코딩해야합니다.)

다음

몇 가지 유용한 자원이 있습니다 ...


편집 : 나는 당신이있는 NSString 객체의 AES 암호화에 your previous question 내 대답이 결합이라고 가정했다. Base64로 데이터를 인코딩해도 데이터 자체에는 아무런 제한도 없습니다. 확실히 AES로 암호화 된 데이터 자체 일 수 있습니다.

  • 가있는 NSString가 암호화 될 제공

    • 암호화 및 암호화에 사용하는 암호 : 여기 당신은 그냥 문자열 입력 및 출력을 원하는 경우 어떻게 할 것인지입니다.
    • 문자열을 NSData로 변환하고 AES 암호화를 수행합니다 (이전 질문 참조).
    • NSData를 Base64로 인코딩 한 다음 인코딩 된 출력의 NSString과 NSString을 만들고 반환하십시오. 해독
    • 는 암호화되고 인코딩 된 문자열 및 복호화에 사용하는 암호를 제공한다.
    • 첫 번째 문자열에서 NSData를 만든 다음 데이터를 Base64로 디코딩합니다.
    • 데이터에서 AES 암호 해독을 수행 한 다음 NSString을 생성하고 반환합니다.

그것은 함께 두 부분을 체인 밖으로 길에 역을 수행 정말 문제입니다. 이전 대답에서 encryptString:withKey:을 수정하여 마지막 단계를 수행 한 다음 문자열을 반환하고 decryptData:withKey:decryptString:withKey:으로 변경하고 두 개의 문자열을 허용 할 수 있습니다. 꽤 간단합니다.

+3

+1 그리고 NSDataAdditions 링크에 감사드립니다. 매우 유용합니다! –

+0

@FreeAsInBeer 편집 할 때 다른 사람들의 답변을 커뮤니티 위키로 표시하지 마십시오. 그것은 그것이 무엇을위한 것이 아닙니다. –

+0

@QuinnTaylor 커뮤니티 위키 확인란에 대한 액세스 권한이있는 유일한 사람은 FAQ에 나와 있습니다. 실수로 내 편집이 커뮤니티 위키 모드로 들어갔을 수도 있지만 완전히 의도하지 않았습니다. 다른 사람들이 할 수없는 일을한다고 비난하지 마십시오. [참고] (http://meta.stackexchange.com/questions/11740/what-are-community-wiki-posts/11741#11741) – FreeAsInBeer

2

문자열에 AES256 암호화를 제공하기 위해 NSData 및 NSString에 대한 범주의 전체 묶음을 조합했습니다.

자세한 내용은 '원래'질문에서 my answer을 참조하십시오.