C#/ios/android Universal encryption and decryption method

Source: Internet
Author: User
Tags base64 decrypt

Original: C#/ios/android Universal encryption and decryption method

The company is doing mobile ios/android, the server provides interface used by the. NET, use encryption to decrypt this piece, also found some methods on the Internet, some are. NET encrypted Android can't decrypt, or vice versa. The following are three platforms that can encrypt the decryption method. key= "1234578" used in encryption and decryption; Simultaneous value in the method of fetching.

C # code

#regionCross-platform plus decryption (C #)/// <summary>        ///des encryption of strings/// </summary>        /// <param name= "sourcestring" >string to encrypt</param>        /// <returns>BASE64 encoded string after encryption</returns>         Public stringEncrypt (stringSourcestring,stringSKey) {            byte[] BtKey =Encoding.UTF8.GetBytes (SKey); byte[] Btiv =Encoding.UTF8.GetBytes (SKey); DESCryptoServiceProvider des=NewDESCryptoServiceProvider (); using(MemoryStream ms =NewMemoryStream ()) {                byte[] InData =Encoding.UTF8.GetBytes (sourcestring); Try                {                    using(CryptoStream cs =NewCryptoStream (MS, Des. CreateEncryptor (BtKey, Btiv), CryptoStreamMode.Write)) {cs. Write (InData,0, indata.length); Cs.                    FlushFinalBlock (); }                    returnconvert.tobase64string (Ms.                ToArray ()); }                Catch                {                    Throw; }            }        }        /// <summary>        ///decryption/// </summary>        /// <param name= "Ptodecrypt" >To decrypt the Base64</param>        /// <param name= "SKey" >Key , and must be 8-bit</param>        /// <returns>decrypted String</returns>         Public stringDecrypt (stringPtodecrypt,stringSKey) {            //Escape Special CharactersPtodecrypt = Ptodecrypt.replace ("-","+"); Ptodecrypt= Ptodecrypt.replace ("_","/"); Ptodecrypt= Ptodecrypt.replace ("~","="); byte[] Inputbytearray =convert.frombase64string (Ptodecrypt); using(DESCryptoServiceProvider des =NewDESCryptoServiceProvider ()) {des. Key=ASCIIEncoding.ASCII.GetBytes (SKey); Des.iv=ASCIIEncoding.ASCII.GetBytes (SKey); System.IO.MemoryStream Ms=NewSystem.IO.MemoryStream (); using(CryptoStream cs =NewCryptoStream (MS, Des. CreateDecryptor (), cryptostreammode.write)) {cs. Write (Inputbytearray,0, inputbytearray.length); Cs.                    FlushFinalBlock (); Cs.                Close (); }                stringstr =Encoding.UTF8.GetString (Ms.                ToArray ()); Ms.                Close (); returnstr; }        }        #endregion

iOS code

        Static Const Char* Encryptwithkeyandtype (Const Char*text,ccoperation Encryptoperation,Char*key) {NSString*textstring=[[NSString Alloc]initwithcstring:text encoding:nsutf8stringencoding]; //NSLog (@ "[[item.url description] utf8string=%@", textstring);    Const void*DataIn;        size_t Datainlength; if(encryptoperation = = Kccdecrypt)//Pass Decrypt decoding    {        //decoding base64NSData *decryptdata = [GTMBase64 decodedata:[textstring datausingencoding:nsutf8stringencoding];//turn utf-8 and decodeDatainlength =[decryptdata length]; DataIn=[decryptdata bytes]; }    Else  //Encrypt{NSData* EncryptData =[TextString datausingencoding:nsutf8stringencoding]; Datainlength=[encryptData length]; DataIn= (Const void*) [EncryptData bytes];    } cccryptorstatus Ccstatus; uint8_t*dataout = NULL;//Understanding bit type/typedef abbreviation (Effective maintenance code ratio: defined with a typedef with a long with int)size_t dataoutavailable =0;//size_t operator sizeof return knot typesize_t dataoutmoved =0; Dataoutavailable= (Datainlength + kccblocksizedes) & ~ (Kccblocksizedes-1); Dataout= malloc (dataoutavailable *sizeof(uint8_t)); memset ((void*) Dataout,xx, dataoutavailable);//memory space buffer first 1 byte value set value 0//nsstring *initiv = @ "12345678";    Const void*vkey =key; Const void*iv = (Const void*) key;//[Initiv utf8string]; //cccrypt function encryption/decryptionCcstatus = Cccrypt (Encryptoperation,//Encryption/DecryptionKccalgorithmdes,//encryption based on which criteria (DES3DESAES)Kccoptionpkcs7padding,//option group cipher (des: 3DES per block: Each group plus three)Vkey,//Key encryption The decryption key must beKcckeysizedes,//DES Key (kcckeysizedes=8)iv//Select the initial vectorDataIn,//Data storage UnitDatainlength,//Data(void*) Dataout,//for returning datadataoutavailable,&dataoutmoved); NSString*result =Nil; if(encryptoperation = = Kccdecrypt)//encryptoperation==1 decoding    {        //Decrypt Data Change Utf-8 stringresult = [[NSString alloc] initwithdata:[nsdata datawithbytes: (Const void*) dataout Length: (Nsuinteger) dataoutmoved] encoding:nsutf8stringencoding]; }    Else //encryptoperation==0 (Encrypted data transfer to base64)    {        //Code base64NSData *data = [NSData datawithbytes: (Const void*) dataout Length: (Nsuinteger) dataoutmoved]; Result=[GTMBase64 Stringbyencodingdata:data]; }        return[result utf8string]; }+ (nsstring*) Encryptwithcontent: (nsstring*) Content type: (ccoperation) type key: (nsstring*) akey{Const Char* Contentchar =[content utf8string]; Char* KeyChar = (Char*) [Akey utf8string]; Const Char*Michar; Michar=Encryptwithkeyandtype (Contentchar, type, KeyChar); return[NSString Stringwithcstring:michar encoding:nsutf8stringencoding];}

Android Code

        //Encrypt         Public Staticstring decryptdonet (String message, string key)throwsException {byte[] Bytesrc =Base64.decode (Message.getbytes (), base64.default); Cipher Cipher= Cipher.getinstance ("des/cbc/pkcs5padding"); Deskeyspec Deskeyspec=NewDeskeyspec (Key.getbytes ("UTF-8")); Secretkeyfactory keyfactory= Secretkeyfactory.getinstance ("DES"); Secretkey Secretkey=Keyfactory.generatesecret (DESKEYSPEC); Ivparameterspec IV=NewIvparameterspec (Key.getbytes ("UTF-8"));            Cipher.init (Cipher.decrypt_mode, Secretkey, iv); byte[] Retbyte =cipher.dofinal (BYTESRC); return NewString (Retbyte); }        //decryption         Public Staticstring encryptasdonet (String message, string key)throwsException {Cipher Cipher= Cipher.getinstance ("des/cbc/pkcs5padding"); Deskeyspec Deskeyspec=NewDeskeyspec (Key.getbytes ("UTF-8")); Secretkeyfactory keyfactory= Secretkeyfactory.getinstance ("DES"); Secretkey Secretkey=Keyfactory.generatesecret (DESKEYSPEC); Ivparameterspec IV=NewIvparameterspec (Key.getbytes ("UTF-8"));            Cipher.init (Cipher.encrypt_mode, Secretkey, iv); byte[] Encryptbyte =cipher.dofinal (Message.getbytes ()); return NewString (Base64.encode (Encryptbyte, Base64.default)); }

Finally, it is important to note that when the client calls the interface, the request is the URL address, the parameters need to be encrypted, such as token, if the token contains the + number, the URL will be transcoded to a space, when the. NET side to receive tokens, you need to replace the token space with the + number: Token = Regex.Replace (token, @ "\s", "+") so that the token received will be decrypted normally.

C#/ios/android Universal encryption and decryption method

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.