Introduction to iOS common cryptographic algorithms and code practices

Source: Internet
Author: User
<span id="Label3"></p><p><p>The iOS system library defines the encryption and decryption algorithms commonly used in software development, and the interface is in C language form. The following categories are included:</p></p><pre><pre><span style="color: #008080;">1</span> #include <CommonCrypto/CommonCryptor.h>//common encryption and decryption algorithm <span style="color: #008080;">2</span> #include <commoncrypto/ Commondigest.h>//digest algorithm <span style="color: #008080;">3</span> #include <CommonCrypto/CommonHMAC.h><span style="color: #008080;">4</span> #include <commoncrypto/ Commonkeyderivation.h><span style="color: #008080;">5</span> #include <CommonCrypto/CommonSymmetricKeywrap.h></pre></pre><p><p>The first type of commonly used encryption and decryption algorithm includes aes,des, and obsolete RC4, the second kind of summary algorithm, including such as Md5,sha. This paper mainly introduces the implementation of Aes,md5,sha three most common algorithms.</p></p><p><p>1 Symmetric cipher Algorithm--aes</p></p><p><p>AES is mainly used in key data and file confidentiality while also need to decrypt the situation, its encryption key and decryption key is the same, according to the key length is divided into 128, 192 and 2,563 levels, the greater the key length security is greater, but the performance is lower, according to the actual business security requirements to determine the Better. In general, the objects that encrypt some key data are strings, and the encrypted results are also saved as strings, so both the parameters and the return values are strings when designing the Interface. (the meaning of key parameters is explained after the Code.) )</p></p><p><p>1.1 Encryption process</p></p><pre><span style="color: #008080;"><span style="color: #008080;">1</span></span>-(nsstring *) aes256_encrypt: (nsstring *<span style="color: #000000;"><span style="color: #000000;">) Key</span></span><span style="color: #008080;"><span style="color: #008080;">2</span></span> <span style="color: #000000;"><span style="color: #000000;">{</span></span><span style="color: #008080;"><span style="color: #008080;">3</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Const</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Char</span></span>*cstr =<span style="color: #000000;"><span style="color: #000000;">[self cstringusingencoding:nsutf8stringencoding];</span></span><span style="color: #008080;"><span style="color: #008080;">4</span></span>NSData *data =<span style="color: #000000;"><span style="color: #000000;">[nsdata datawithbytes:cstr length:self.length];</span></span><span style="color: #008080;"><span style="color: #008080;">5</span></span> <span style="color: #008080;"><span style="color: #008080;">6</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Encrypt the data</span></span><span style="color: #008080;"><span style="color: #008080;">7</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Char</span></span>keyptr[kcckeysizeaes256+<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">];</span></span><span style="color: #008080;"><span style="color: #008080;">8</span></span>Bzero (keyptr,<span style="color: #0000ff;"><span style="color: #0000ff;">sizeof</span></span><span style="color: #000000;"><span style="color: #000000;">(keyptr));</span></span><span style="color: #008080;"><span style="color: #008080;">9</span></span>[key getcstring:keyptr MaxLength:<span style="color: #0000ff;"><span style="color: #0000ff;">sizeof</span></span><span style="color: #000000;"><span style="color: #000000;">(keyptr) encoding:nsutf8stringencoding];</span></span><span style="color: #008080;"><span style="color: #008080;">Ten</span></span>Nsuinteger datalength =<span style="color: #000000;"><span style="color: #000000;">[data length];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> one</span>size_t buffersize = datalength +<span style="color: #000000;"><span style="color: #000000;">kCCBlockSizeAES128;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>*buffer =<span style="color: #000000;"><span style="color: #000000;">malloc (buffersize);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>size_t numbytesencrypted =<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>Cccryptorstatus Cryptstatus =<span style="color: #000000;"><span style="color: #000000;">cccrypt (kccencrypt, kccalgorithmaes,</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>kccoptionpkcs7padding |<span style="color: #000000;"><span style="color: #000000;">kccoptionecbmode,</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">keyptr, kCCKeySizeAES256,</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">NULL,</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">[data bytes], datalength,</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #000000;"><span style="color: #000000;">buffer, buffersize,</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>&<span style="color: #000000;"><span style="color: #000000;">numbytesencrypted);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(cryptstatus = =<span style="color: #000000;"><span style="color: #000000;">Kccsuccess)</span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span> <span style="color: #000000;"><span style="color: #000000;"> {</span></span><span style="color: #008080;"><span style="color: #008080;"></span> at</span>NSData *result =<span style="color: #000000;"><span style="color: #000000;">[nsdata Datawithbytesnocopy:buffer length:numbytesencrypted];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Base64</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">[result base64encodedstringwithoptions:nsdatabase64encoding64characterlinelength];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>}<span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;"> {</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">nil;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> in</span> <span style="color: #000000;"><span style="color: #000000;"> }</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #008080;"><span style="color: #008080;"></span> to</span>}</pre><p><p>1.2 Decryption process</p></p><pre><span style="color: #008080;"><span style="color: #008080;">1</span></span>-(nsstring *) aes256_decrypt: (nsstring *<span style="color: #000000;"><span style="color: #000000;">) Key</span></span><span style="color: #008080;"><span style="color: #008080;">2</span></span> <span style="color: #000000;"><span style="color: #000000;">{</span></span><span style="color: #008080;"><span style="color: #008080;">3</span></span>NSData *data =<span style="color: #000000;"><span style="color: #000000;">[[nsdata alloc] initwithbase64encodeddata:[self datausingencoding:nsasciistringencoding] options: nsdatabase64decodingignoreunknowncharacters];</span></span><span style="color: #008080;"><span style="color: #008080;">4</span></span> <span style="color: #008080;"><span style="color: #008080;">5</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Decrypt the data</span></span><span style="color: #008080;"><span style="color: #008080;">6</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Char</span></span>keyptr[kcckeysizeaes256+<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">];</span></span><span style="color: #008080;"><span style="color: #008080;">7</span></span>Bzero (keyptr,<span style="color: #0000ff;"><span style="color: #0000ff;">sizeof</span></span><span style="color: #000000;"><span style="color: #000000;">(keyptr));</span></span><span style="color: #008080;"><span style="color: #008080;">8</span></span>[key getcstring:keyptr MaxLength:<span style="color: #0000ff;"><span style="color: #0000ff;">sizeof</span></span><span style="color: #000000;"><span style="color: #000000;">(keyptr) encoding:nsutf8stringencoding];</span></span><span style="color: #008080;"><span style="color: #008080;">9</span></span>Nsuinteger datalength =<span style="color: #000000;"><span style="color: #000000;">[data length];</span></span><span style="color: #008080;"><span style="color: #008080;">Ten</span></span>size_t buffersize = datalength +<span style="color: #000000;"><span style="color: #000000;">kCCBlockSizeAES128;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> one</span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>*buffer =<span style="color: #000000;"><span style="color: #000000;">malloc (buffersize);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span>size_t numbytesdecrypted =<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>Cccryptorstatus Cryptstatus =<span style="color: #000000;"><span style="color: #000000;">cccrypt (kccdecrypt, kccalgorithmaes,</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>kccoptionpkcs7padding |<span style="color: #000000;"><span style="color: #000000;">kccoptionecbmode,</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;">keyptr, kCCKeySizeAES256,</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">NULL,</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">[data bytes], datalength,</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">buffer, buffersize,</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span>&<span style="color: #000000;"><span style="color: #000000;">numbytesdecrypted);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(cryptstatus = =<span style="color: #000000;"><span style="color: #000000;">Kccsuccess)</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #000000;"><span style="color: #000000;"> {</span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span>nsdata* result =<span style="color: #000000;"><span style="color: #000000;">[nsdata Datawithbytesnocopy:buffer length:numbytesdecrypted];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> at</span> <span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">[[nsstring alloc] initwithdata:result encoding:nsutf8stringencoding];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #008080;"><span style="color: #008080;"></span> -</span>}<span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;"> {</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">nil;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> in</span> <span style="color: #000000;"><span style="color: #000000;"> }</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #008080;"><span style="color: #008080;"></span> to</span>}</pre><p><p>1.3 Interface Invocation Example</p></p><pre><span style="color: #008080;"><span style="color: #008080;">1</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>Main<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>argc<span style="color: #0000ff;"><span style="color: #0000ff;">Const</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Char</span></span>*<span style="color: #000000;"><span style="color: #000000;">Argv[]) {</span></span><span style="color: #008080;"><span style="color: #008080;">2</span></span> <span style="color: #000000;"><span style="color: #000000;">@autoreleasepool</span></span><span style="color: #008080;"><span style="color: #008080;">3</span></span> <span style="color: #000000;"><span style="color: #000000;"> {</span></span><span style="color: #008080;"><span style="color: #008080;">4</span></span> <span style="color: #008080;"><span style="color: #008080;">5</span></span>NSString *plaintext =<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">o57w05xn-eq2hcd3v-lpjj4h0n-zfo2whrr-9havxr2j-ytyxdqpk-sjxzxali-faihjv</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;">6</span></span>NSString *key =<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">12345678901234561234567890123456</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;">7</span></span> <span style="color: #008080;"><span style="color: #008080;">8</span></span>NSString *crypttext =<span style="color: #000000;"><span style="color: #000000;">[plaintext aes256_encrypt:key];</span></span><span style="color: #008080;"><span style="color: #008080;">9</span></span>NSLog (<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">crypttext:\n%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, crypttext);</span></span><span style="color: #008080;"><span style="color: #008080;">Ten</span></span> <span style="color: #008080;"><span style="color: #008080;"></span> one</span>NSString *newplaintext =<span style="color: #000000;"><span style="color: #000000;">[crypttext aes256_decrypt:key];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span>NSLog (<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">newplaintext:%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, newplaintext);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #008080;"><span style="color: #008080;"></span> -</span>NSString *NEWCRYPTEXT3 =<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">u7cked8fscz6czs5eu7emxnm6/5awkzwbufk+d1jqdzim5junkgqnzi/vmiwfpvy5qd5vifh7qajzjdszxnkspg/b4if5bskdffp/ 3aysbw=</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>NSString *NEWPLAINTEXT3 =<span style="color: #000000;"><span style="color: #000000;">[newCrypText3 aes256_decrypt:key];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>NSLog (<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">newplaintext3:%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, newPlainText3);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;"> }</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span> <span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>}</pre><p><p>1.4 Significance of key parameters</p></p><p><p>To master the use of AES algorithm, it is necessary to understand its several modes of operation, initialization vector, filling patterns and other concepts, often need to maintain a consistent multi-platform encryption and decryption results, use must be more Confirmation. (you can use online website encryption to authenticate YOURSELF.) )</p></p><p><p>kCCKeySizeAES256</p></p><p><p>There are 128,192 key lengths, enumerated types, and Two.</p></p><p><p>kCCBlockSizeAES128</p></p><p><p>Block length, Fixed value 16 (bytes, 128 bits), determined by the AES algorithm internal cryptographic details, but which method, mode, are for This.</p></p><p><p>Kccalgorithmaes</p></p><p><p>The algorithm name, which does not distinguish between 128, 192, or 258. KCCAlgorithmAES128 is only a historical reason, the same as the Kccalgorithmaes Value.</p></p><p><p>Kccoptionpkcs7padding</p></p><p><p>Fill mode, The internal encryption details of the AES algorithm determine that the plaintext of AES must be an integer multiple of 64 bits, if the number of bits is insufficient, it needs to be padded. Kccoptionpkcs7padding said, The lack of a few to fill a few. For example, if 3 bits are missing, then fill 3 3 in clear Text. iOS is only one way to do this, and other platforms are more like Kccoptionpkcs5padding,kccoptionzeropadding. If consistency is to be achieved, other platforms here will also use Kccoptionpkcs7padding.</p></p><p><p>Kccoptionecbmode</p></p><p><p>Mode of operation, electronic password Mode. This mode does not require an initialization vector. There are only two modes of ios, the default is CBC mode, which is block encryption Mode. Standard AES is in addition to other methods such as Ctr,cfb. Kccoptionecbmode mode multi-platform requirements are not high, recommended to Use. CBC mode, requires the same initialization vector, multiple platforms to be consistent, workload increased, more secure, suitable for higher requirements of the scene Use.</p></p><p><p>Base64</p></p><p><p>A Unicode to ASCI code mapping, because the plaintext and ciphertext standards before and after the encryption may be Chinese characters or special characters, so for the intuitive display, the plaintext and ciphertext are usually base64 Encoded.</p></p><p><p>2 Digest algorithm</p></p><p><p>Abstract algorithm, with one-way irreversible basic properties, Fast.</p></p><p><p>2.1 Message digest Algorithm MD5</p></p><p><p>The MD5 algorithm maps any plaintext (not Null) to a bit 32-bit string. Digital signatures and complex encryption systems are used in isolation due to the low security of the Crash-vault.</p></p><pre><span style="color: #008080;"><span style="color: #008080;">1</span></span>-(nsstring *<span style="color: #000000;"><span style="color: #000000;">) Md5hexdigest</span></span><span style="color: #008080;"><span style="color: #008080;">2</span></span> <span style="color: #000000;"><span style="color: #000000;">{</span></span><span style="color: #008080;"><span style="color: #008080;">3</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Const</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Char</span></span>*cstr =<span style="color: #000000;"><span style="color: #000000;">[self cstringusingencoding:nsutf8stringencoding];</span></span><span style="color: #008080;"><span style="color: #008080;">4</span></span> <span style="color: #008080;"><span style="color: #008080;">5</span></span>Unsigned<span style="color: #0000ff;"><span style="color: #0000ff;">Char</span></span><span style="color: #000000;"><span style="color: #000000;">result[cc_md5_digest_length];</span></span><span style="color: #008080;"><span style="color: #008080;">6</span></span> <span style="color: #008080;"><span style="color: #008080;">7</span></span>CC_MD5 (cstr, (unsigned<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">) strlen (cstr), result);</span></span><span style="color: #008080;"><span style="color: #008080;">8</span></span> <span style="color: #008080;"><span style="color: #008080;">9</span></span>nsmutablestring *output = [nsmutablestring Stringwithcapacity:cc_md5_digest_length *<span style="color: #800080;"><span style="color: #800080;">2</span></span><span style="color: #000000;"><span style="color: #000000;">];</span></span><span style="color: #008080;"><span style="color: #008080;">Ten</span></span> <span style="color: #008080;"><span style="color: #008080;"></span> one</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>i =<span style="color: #800080;"><span style="color: #800080;">0</span></span>; I < cc_md5_digest_length; i++<span style="color: #000000;"><span style="color: #000000;">)</span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span>[output appendformat:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">%02x</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, result[i]];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">output;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #008080;"><span style="color: #008080;"></span> -</span>}</pre><p><p>The results are stored in 16-string format, and can be base64 and other Processing.</p></p><p><p>2.2 Secure Hashing Algorithm SHA</p></p><p><p>Sha According to the results of the number of bits divided into 256, 484, 5,123 basic methods, According to the results of the requirements and Choose. Set by enumeration types such as Cc_sha256_digest_length.</p></p><pre><span style="color: #008080;"><span style="color: #008080;">1</span></span>-(nsstring *<span style="color: #000000;"><span style="color: #000000;">) Sha256hexdigest</span></span><span style="color: #008080;"><span style="color: #008080;">2</span></span> <span style="color: #000000;"><span style="color: #000000;">{</span></span><span style="color: #008080;"><span style="color: #008080;">3</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Const</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Char</span></span>*cstr =<span style="color: #000000;"><span style="color: #000000;">[self cstringusingencoding:nsutf8stringencoding];</span></span><span style="color: #008080;"><span style="color: #008080;">4</span></span>NSData *data =<span style="color: #000000;"><span style="color: #000000;">[nsdata datawithbytes:cstr length:self.length];</span></span><span style="color: #008080;"><span style="color: #008080;">5</span></span> <span style="color: #008080;"><span style="color: #008080;">6</span></span> <span style="color: #000000;"><span style="color: #000000;">uint8_t digest[cc_sha256_digest_length];</span></span><span style="color: #008080;"><span style="color: #008080;">7</span></span> <span style="color: #008080;"><span style="color: #008080;">8</span></span>cc_sha256 (data.bytes, (unsigned<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">) data.length, digest);</span></span><span style="color: #008080;"><span style="color: #008080;">9</span></span> <span style="color: #008080;"><span style="color: #008080;">Ten</span></span>nsmutablestring* output = [nsmutablestring stringwithcapacity:cc_sha256_digest_length *<span style="color: #800080;"><span style="color: #800080;">2</span></span><span style="color: #000000;"><span style="color: #000000;">];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> one</span> <span style="color: #008080;"><span style="color: #008080;"></span> a</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>i =<span style="color: #800080;"><span style="color: #800080;">0</span></span>; I < cc_sha256_digest_length; i++<span style="color: #000000;"><span style="color: #000000;">)</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>[output appendformat:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">%02x</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, digest[i]];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">output;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>}</pre><p><p>3 to be continued, the use of RSA asymmetric cryptography is introduced later. The relevant code will also be synced to GitHub for welcome Communication.</p></p><p><p>  </p></p><p><p></p></p><p><p>Introduction to iOS common cryptographic algorithms and code practices</p></p></span>
Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.