{"id":57,"date":"2013-07-23T12:44:57","date_gmt":"2013-07-23T10:44:57","guid":{"rendered":"http:\/\/www.virtual-hideout.de\/blog\/?p=57"},"modified":"2018-08-22T14:15:13","modified_gmt":"2018-08-22T12:15:13","slug":"aes-verschlusselung","status":"publish","type":"post","link":"https:\/\/virtual-hideout.de\/blog\/aes-verschlusselung\/","title":{"rendered":"AES Verschl\u00fcsselung zur sicheren Daten\u00fcbertragung an php-Skript"},"content":{"rendered":"<p><!--more--><\/p>\n<p>iOS<\/p>\n<pre>NSString *str = <span style=\"color: #ff0000;\">@\"Enter data to be encrypted here!\"<\/span>;\r\nNSString *strKey = <span style=\"color: #ff0000;\">@\"MySecretEncryptionKeyWith32Chars\"<\/span>;\r\nNSString *strCrypt = [str <span style=\"color: #008080;\">AES256EncryptWithKey<\/span>:strKey];<\/pre>\n<p>CBCrypt.h<\/p>\n<pre>#import <span style=\"color: #ff0000;\">&lt;Foundation\/Foundation.h&gt;<\/span>\r\n\r\n<span style=\"color: #ff00ff;\">@interface<\/span> NSData (AESCrypt)\r\n\r\n- (NSData *)AES256EncryptWithKey:(NSString *)key;\r\n- (NSString *)base64Encoding;\r\n\r\n<span style=\"color: #ff00ff;\">@end<\/span>\r\n\r\n<span style=\"color: #339966;\">\/\/ ------------------------------------------------------------------------------\r\n<\/span>\r\n<span style=\"color: #ff00ff;\">@interface<\/span> NSString (AESCrypt)\r\n\r\n- (NSString *)AES256EncryptWithKey:(NSString *)key reverse:(BOOL)reverse;\r\n\r\n<span style=\"color: #ff00ff;\">@end<\/span><\/pre>\n<p>CBCrypt.m<\/p>\n<pre>#import <span style=\"color: #ff0000;\">\"CBCrypt.h\"<\/span>\r\n#import <span style=\"color: #ff0000;\">&lt;CommonCrypto\/CommonCryptor.h&gt;<\/span>\r\n\r\n<span style=\"color: #ff00ff;\">static char<\/span> encodingTable[64] = {\r\n    <span style=\"color: #0000ff;\">'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',\r\n    'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',\r\n    'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',\r\n    'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','\/'<\/span>\r\n};\r\n\r\n<span style=\"color: #ff00ff;\">@implementation<\/span> NSData (AESCrypt)\r\n\r\n- (<span style=\"color: #666699;\">NSData<\/span> *)AES256EncryptWithKey:(<span style=\"color: #666699;\">NSString<\/span> *)key{\r\n    <span style=\"color: #339966;\">\/\/ 'key' should be 16 bytes for AES128<\/span>\r\n    <span style=\"color: #ff00ff;\">char<\/span> keyPtr[<span style=\"color: #666699;\">kCCKeySizeAES256<\/span> + 1]; <span style=\"color: #339966;\">\/\/ room for terminator (unused)<\/span>\r\n    <span style=\"color: #666699;\">bzero<\/span>( keyPtr, <span style=\"color: #ff00ff;\">sizeof<\/span>( keyPtr ) ); <span style=\"color: #339966;\">\/\/ fill with zeroes (for padding)<\/span>\r\n\r\n    <span style=\"color: #339966;\">\/\/ fetch key data<\/span>\r\n    [key<span style=\"color: #666699;\"> getCString<\/span>:keyPtr <span style=\"color: #666699;\">maxLength<\/span>:sizeof(keyPtr) <span style=\"color: #666699;\">encoding:NSUTF8StringEncoding<\/span>];\r\n\r\n    <span style=\"color: #666699;\">NSUInteger<\/span> dataLength = [<span style=\"color: #ff00ff;\">self<\/span> <span style=\"color: #666699;\">length<\/span>];\r\n\r\n    <span style=\"color: #666699;\">size_t<\/span> bufferSize = dataLength + <span style=\"color: #666699;\">kCCBlockSizeAES128<\/span>;\r\n    <span style=\"color: #ff00ff;\">void<\/span> *buffer = <span style=\"color: #666699;\">malloc<\/span>( bufferSize );\r\n\r\n    <span style=\"color: #666699;\">size_t<\/span> numBytesEncrypted = 0;\r\n    <span style=\"color: #666699;\">CCCryptorStatus<\/span> cryptStatus = CCCrypt( \r\n        <span style=\"color: #666699;\">kCCEncrypt<\/span>, \r\n        <span style=\"color: #666699;\">kCCAlgorithmAES128<\/span>, \r\n        <span style=\"color: #666699;\">kCCOptionECBMode<\/span> | <span style=\"color: #666699;\">kCCOptionPKCS7Padding<\/span>,\r\n        keyPtr, \r\n        kCCKeySizeAES256,\r\n        <span style=\"color: #ff00ff;\">NULL<\/span> <span style=\"color: #339966;\">\/* initialization vector (optional) *\/<\/span>,\r\n        [<span style=\"color: #ff00ff;\">self<\/span> <span style=\"color: #666699;\">bytes<\/span>], \r\n        dataLength, <span style=\"color: #339966;\">\/* input *\/<\/span>\r\n        buffer, \r\n        bufferSize, <span style=\"color: #339966;\">\/* output *\/<\/span>\r\n        &amp;numBytesEncrypted \r\n    );\r\n    <span style=\"color: #ff00ff;\">if<\/span>( cryptStatus == <span style=\"color: #666699;\">kCCSuccess<\/span> ){\r\n        <span style=\"color: #339966;\">\/\/ the returned NSData takes ownership of the buffer <\/span>\r\n<span style=\"color: #339966;\">        \/\/ and will free it on deallocation<\/span>\r\n        return [<span style=\"color: #666699;\">NSData dataWithBytesNoCopy<\/span>:buffer <span style=\"color: #666699;\">length<\/span>:numBytesEncrypted];\r\n    }\r\n\r\n    <span style=\"color: #666699;\">free<\/span>( buffer ); <span style=\"color: #339966;\">\/\/free the buffer<\/span>\r\n    <span style=\"color: #ff00ff;\">return nil<\/span>;\r\n}\r\n\r\n- (<span style=\"color: #666699;\">NSString<\/span> *)base64Encoding{\r\n    <span style=\"color: #ff00ff;\">const unsigned char<\/span>   *bytes = [self bytes];\r\n    <span style=\"color: #666699;\">NSMutableString<\/span> *result = [<span style=\"color: #666699;\">NSMutableString<\/span> <span style=\"color: #666699;\">stringWithCapacity<\/span>:<span style=\"color: #ff00ff;\">self<\/span>.<span style=\"color: #666699;\">length<\/span>];\r\n    <span style=\"color: #ff00ff;\">unsigned long<\/span> ixtext = 0;\r\n    <span style=\"color: #ff00ff;\">unsigned long<\/span> lentext = <span style=\"color: #ff00ff;\">self<\/span>.<span style=\"color: #666699;\">length<\/span>;\r\n    <span style=\"color: #ff00ff;\">long<\/span> ctremaining = 0;\r\n   <span style=\"color: #ff00ff;\"> unsigned char<\/span> inbuf[3], outbuf[4];\r\n    <span style=\"color: #ff00ff;\">unsigned short<\/span> i = 0;\r\n    <span style=\"color: #ff00ff;\">unsigned short<\/span> charsonline = 0, ctcopy = 0;\r\n    <span style=\"color: #ff00ff;\">unsigned long<\/span> ix = 0;\r\n\r\n    <span style=\"color: #ff00ff;\">while<\/span>( <span style=\"color: #ff00ff;\">YES<\/span> )    {\r\n        ctremaining = lentext - ixtext;\r\n        if( ctremaining &lt;= 0 ) <span style=\"color: #ff00ff;\">break<\/span>;\r\n\r\n        <span style=\"color: #ff00ff;\">for<\/span>( i = 0; i &lt; 3; i++ ){\r\n            ix = ixtext + i;\r\n            <span style=\"color: #ff00ff;\">if<\/span>( ix &lt; lentext ) {\r\n            \tinbuf[i] = bytes[ix];             \r\n            } <span style=\"color: #ff00ff;\">else<\/span> {\r\n                inbuf [i] = 0;\r\n            }         \r\n        }                  \r\n        outbuf [0] = (inbuf [0] &amp; 0xFC) &gt;&gt; 2;\r\n        outbuf [1] = ((inbuf [0] &amp; 0x03) &lt;&lt; 4) | ((inbuf [1] &amp; 0xF0) &gt;&gt; 4);\r\n        outbuf [2] = ((inbuf [1] &amp; 0x0F) &lt;&lt; 2) | ((inbuf [2] &amp; 0xC0) &gt;&gt; 6);\r\n        outbuf [3] = inbuf [2] &amp; 0x3F;\r\n        ctcopy = 4;\r\n\r\n        <span style=\"color: #ff00ff;\">switch<\/span>( ctremaining ){\r\n            <span style=\"color: #ff00ff;\">case<\/span> 1:\r\n                ctcopy = 2;\r\n                <span style=\"color: #ff00ff;\">break<\/span>;\r\n            <span style=\"color: #ff00ff;\">case<\/span> 2:\r\n                ctcopy = 3;\r\n                <span style=\"color: #ff00ff;\">break<\/span>;\r\n        }\r\n\r\n        <span style=\"color: #ff00ff;\">for<\/span>( i = 0; i &lt; ctcopy; i++ ){\r\n            [result <span style=\"color: #666699;\">appendFormat<\/span>:<span style=\"color: #ff0000;\">@\"%c\"<\/span>, <span style=\"color: #008080;\">encodingTable<\/span>[outbuf[i]]];\r\n        }\r\n\r\n        <span style=\"color: #ff00ff;\">for<\/span>( i = ctcopy; i &lt; 4; i++ ){\r\n            [result <span style=\"color: #666699;\">appendString<\/span>:<span style=\"color: #ff0000;\">@\"=\"<\/span>];\r\n\t\t}\r\n\r\n        ixtext += 3;\r\n        charsonline += 4;\r\n    }\r\n    <span style=\"color: #ff00ff;\">return<\/span> [<span style=\"color: #666699;\">NSString<\/span> <span style=\"color: #666699;\">stringWithString<\/span>:result];\r\n\r\n<span style=\"color: #ff00ff;\">@end<\/span>\r\n\r\n\/\/ ------------------------------------------------------------------------------\r\n\r\n<span style=\"color: #ff00ff;\">@implementation<\/span> NSString (AESCrypt)\r\n\r\n- (<span style=\"color: #666699;\">NSString<\/span> *)AES256EncryptWithKey:(<span style=\"color: #666699;\">NSString<\/span> *)key{\r\n    <span style=\"color: #666699;\">NSData<\/span> *plainData = [<span style=\"color: #ff00ff;\">self<\/span> <span style=\"color: #666699;\">dataUsingEncoding:NSUTF8StringEncoding<\/span>];\r\n    <span style=\"color: #666699;\">NSData<\/span> *encryptedData = [plainData <span style=\"color: #008080;\">AES256EncryptWithKey<\/span>:key];\r\n    <span style=\"color: #666699;\">NSString<\/span> *encryptedString = [encryptedData <span style=\"color: #008080;\">base64Encoding<\/span>];\r\n    <span style=\"color: #666699;\">CFStringRef<\/span> urlString = <span style=\"color: #666699;\">CFURLCreateStringByAddingPercentEscapes<\/span>( \r\n        <span style=\"color: #ff00ff;\">NULL<\/span>, \r\n        (<span style=\"color: #666699;\">CFStringRef<\/span>)encryptedString, \r\n        <span style=\"color: #ff00ff;\">NULL<\/span>, \r\n        (<span style=\"color: #666699;\">CFStringRef<\/span>)<span style=\"color: #ff0000;\">@\"!*'\\\"();:@=+$,\/?%#[]%\u00a0\"<\/span>, <span style=\"color: #339966;\">\/\/ add &amp; here, the editor won't let me ;)<\/span>\r\n        <span style=\"color: #666699;\">kCFStringEncodingUTF8<\/span> );\r\n\r\n    <span style=\"color: #ff00ff;\">return<\/span> (<span style=\"color: #ff00ff;\">__bridge<\/span> <span style=\"color: #666699;\">NSString<\/span>*)urlString;\r\n}\r\n<span style=\"color: #ff00ff;\">@end<\/span><\/pre>\n<p>php<\/p>\n<pre><span style=\"color: #0000ff;\">function<\/span> decryptAES<span style=\"color: #ffcc00;\">(<\/span>$_str,$_key<span style=\"color: #ffcc00;\">){<\/span>\r\n\r\n\t$padded_key = $_key . <span style=\"color: #0000ff;\">str_repeat<\/span>(<span style=\"color: #0000ff;\">chr<\/span>(<span style=\"color: #ff0000;\">0x00<\/span>), <span style=\"color: #ff0000;\">16<\/span>);\r\n\t$result = <span style=\"color: #0000ff;\">mcrypt_decrypt<\/span><span style=\"color: #ffcc00;\">(<\/span><span style=\"color: #339966;\">MCRYPT_RIJNDAEL_128<\/span>, $padded_key, <span style=\"color: #0000ff;\">base64_decode<\/span><span style=\"color: #ffcc00;\">(<\/span>$_str<span style=\"color: #ffcc00;\">)<\/span>, <span style=\"color: #ff0000;\">'ecb'<\/span><span style=\"color: #ffcc00;\">)<\/span>;\r\n\r\n\t$pad_char = <span style=\"color: #0000ff;\">ord<\/span><span style=\"color: #ffcc00;\">(<\/span><span style=\"color: #0000ff;\">substr<\/span><span style=\"color: #ffcc00;\">(<\/span>$result, -<span style=\"color: #ff0000;\">1<\/span><span style=\"color: #ffcc00;\">))<\/span>;\r\n\t$result_without_padding = <span style=\"color: #0000ff;\">substr<\/span><span style=\"color: #ffcc00;\">(<\/span>$result,<span style=\"color: #ff0000;\"> 0<\/span>, <span style=\"color: #0000ff;\">strlen<\/span><span style=\"color: #ffcc00;\">(<\/span>$result<span style=\"color: #ffcc00;\">)<\/span> - $pad_char<span style=\"color: #ffcc00;\">)<\/span>;\r\n\r\n\t<span style=\"color: #0000ff;\">return<\/span> $result_without_padding;\r\n<span style=\"color: #ffcc00;\">}<\/span><\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[20,21,24,22,23],"class_list":["post-57","post","type-post","status-publish","format-standard","hentry","category-entwicklung","tag-aes","tag-aes256","tag-crypt","tag-php","tag-verschlusselung"],"_links":{"self":[{"href":"https:\/\/virtual-hideout.de\/blog\/wp-json\/wp\/v2\/posts\/57","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/virtual-hideout.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/virtual-hideout.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/virtual-hideout.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/virtual-hideout.de\/blog\/wp-json\/wp\/v2\/comments?post=57"}],"version-history":[{"count":36,"href":"https:\/\/virtual-hideout.de\/blog\/wp-json\/wp\/v2\/posts\/57\/revisions"}],"predecessor-version":[{"id":96,"href":"https:\/\/virtual-hideout.de\/blog\/wp-json\/wp\/v2\/posts\/57\/revisions\/96"}],"wp:attachment":[{"href":"https:\/\/virtual-hideout.de\/blog\/wp-json\/wp\/v2\/media?parent=57"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/virtual-hideout.de\/blog\/wp-json\/wp\/v2\/categories?post=57"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/virtual-hideout.de\/blog\/wp-json\/wp\/v2\/tags?post=57"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}