2016-06-08 3 views
1

암호화를위한 해시 키를 생성하는 일부 .net 코드가 있습니다. iOS에서 해당 코드를 원하지만 적절한 해결책을 찾지 못했습니다. 누구든지 적절한 해결책을 가지고 있으면IOS에서 문구와 소금 값을 미리 정의하여 해시 키를 생성하는 방법은 무엇입니까?

나는 내 .net을 추가합니다. 코드가 잘 작동, 난 이런 식으로 같은 결과

Public Shared Function Encrypt(ByVal plainText As String) As String 

    Dim passPhrase As String = "passPhrase" 
    Dim saltValue As String = "saltValue" 
    Dim hashAlgorithm As String = "SHA256" 

    Dim passwordIterations As Integer = 2 
    Dim initVector As String = "abc123def456gh78" 
    Dim keySize As Integer = 256 

    Dim initVectorBytes As Byte() = Encoding.ASCII.GetBytes(initVector) 
    Dim saltValueBytes As Byte() = Encoding.ASCII.GetBytes(saltValue) 

    Dim plainTextBytes As Byte() = Encoding.UTF8.GetBytes(plainText) 

    Dim password As New PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations) 
    Dim keyBytes As Byte() = password.GetBytes(keySize \ 8) 

End Function 
+0

당신은 암호화를위한 SHA256 – Paulw11

+0

@ Paulw11 네, 그리고 FBEncryptorAES 클래스의 CommonCrypto 프레임 워크를 사용하여 텍스트를 해독 –

답변

1

나는 또한 같은 문제에 직면 한을 아이폰 OS에서 해당 코드를 변환 할 그리고 난 솔루션은 당신을 위해 전체 도움이 될 수 있습니다 발견했다.

FBEncryptorAES 라이브러리를 Github에서 가져옵니다.

.net 알고리즘에 따라 IV 및 Key를 정의하십시오.

사용이 암호화에 대한 방법은

+ (NSData*)encryptData:(NSData*)data 
{ 
    NSData* result = nil; 

    // setup output buffer 
    size_t bufferSize = [data length] + FBENCRYPT_BLOCK_SIZE; 
    void *buffer = malloc(bufferSize); 

    // do encrypt 
    size_t encryptedSize = 0; 
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, 
              FBENCRYPT_ALGORITHM, 
              kCCOptionPKCS7Padding, 
              cKey, 
              FBENCRYPT_KEY_SIZE, 
              cIv, 
              [data bytes], 
              [data length], 
              buffer, 
              bufferSize, 
              &encryptedSize); 
    if (cryptStatus == kCCSuccess) { 
     result = [NSData dataWithBytesNoCopy:buffer length:encryptedSize]; 
    } else { 
     free(buffer); 
     NSLog(@"[ERROR] failed to encrypt|CCCryptoStatus: %d", cryptStatus); 
    } 

    return result; 
} 

+ (NSData*)decryptData:(NSData*)data 
{ 
    NSData* result = nil; 

    // setup output buffer 
    size_t bufferSize = [data length] + FBENCRYPT_BLOCK_SIZE; 
    void *buffer = malloc(bufferSize); 

    // do decrypt 
    size_t decryptedSize = 0; 
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, 
              FBENCRYPT_ALGORITHM, 
              kCCOptionPKCS7Padding, 
              cKey, 
              FBENCRYPT_KEY_SIZE, 
              cIv, 
              [data bytes], 
              [data length], 
              buffer, 
              bufferSize, 
              &decryptedSize); 

    if (cryptStatus == kCCSuccess) { 
     result = [NSData dataWithBytesNoCopy:buffer length:decryptedSize]; 
    } else { 
     free(buffer); 
     NSLog(@"[ERROR] failed to decrypt| CCCryptoStatus: %d", cryptStatus); 
    } 

    return result; 
}