• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Farwall · Jan 16, 2018 at 05:39 AM · c#androidencryption

Encryption/Decryption Issue in Android Device in Unity3d

I am trying to encrypt/decrypt my game score. its working fine as it shoud in Unity Editor. But after build on android device its not working.

Its throwing an error in LogCat, screenshot below alt text

Here is the Scrips I used:

 using UnityEngine;
 using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Text;
 using System.Security.Cryptography;
 
 public class TripleDESEncryptor : MonoBehaviour {
 
     private static string encryptionKey = DataEncryptor.Encrypt("@!#$%6+_|:><{}-=)!:%(#+&*><|");
 
     public static string Encrypt(string toEncrypt, bool useHash){
         if (string.IsNullOrEmpty(encryptionKey))
             return "";
 
         byte[] keyArray;
         byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
 
         if(useHash){
             MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
             keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(encryptionKey));
             hashmd5.Clear();
         }else
             keyArray = UTF8Encoding.UTF8.GetBytes(encryptionKey);
 
         TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
         tdes.Key = keyArray;
         tdes.Mode = CipherMode.ECB;
         tdes.Padding = PaddingMode.PKCS7;
 
         ICryptoTransform ctransform = tdes.CreateEncryptor();
         byte[] resultArray = ctransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
         tdes.Clear();
 
         return Convert.ToBase64String(resultArray, 0, resultArray.Length);
 
     }
 
     public static string Decrypt(string cipherString, bool useHash){
         if (string.IsNullOrEmpty(encryptionKey))
             return "";
 
         byte[] keyArray;
         byte[] toDecryptArray = Convert.FromBase64String(cipherString.Replace(' ', '+'));
 
         if(useHash){
             MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
             keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(encryptionKey));
             hashmd5.Clear();
         }else 
             keyArray = UTF8Encoding.UTF8.GetBytes(encryptionKey);
 
         TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
         tdes.Key = keyArray;
         tdes.Mode = CipherMode.ECB;
         tdes.Padding = PaddingMode.PKCS7;
 
         ICryptoTransform cTransform = tdes.CreateDecryptor();
         byte[] resultArray = cTransform.TransformFinalBlock(toDecryptArray, 0, toDecryptArray.Length);
 
         return UTF8Encoding.UTF8.GetString(resultArray);
 
     }
 }

And the other script i use for decryption is below:

 using UnityEngine;
 using System.Collections;
 using System.Security.Cryptography;
 using System.IO;
 using System.Text;
 using System.Globalization;
 
 public class DataEncryptor : MonoBehaviour {
 
     private static string k1_1 = "@!#$%6+_|:><";
     private static string k2_1 = "@!#$%6+_|:><{}-=)!:%(#+&*><|";
 
     protected static DataEncryptor instance;
 
 
     // Use this for initialization
     void Start () {
         if(instance != null){
             Destroy(gameObject);
             return;
         }
 
         instance = this;
         transform.parent = null;
         DontDestroyOnLoad(gameObject);
 
     }
 
     // Update is called once per frame
     void Update () {
 
     }
 
 
     public static string Encrypt(string data){
         //Debug.Log("Data "+data);
         if(string.IsNullOrEmpty(data)){
             return "";
         }
         Rijndael aes = Rijndael.Create();
         aes.Padding = PaddingMode.PKCS7;
         aes.IV = Encoding.ASCII.GetBytes(k1_1);
         aes.Key = Encoding.ASCII.GetBytes(k2_1);
 
         byte[] rawData = Encoding.Unicode.GetBytes(data);
         MemoryStream memoryStream = new MemoryStream();
         CryptoStream cryptoStream = new CryptoStream(memoryStream, aes.CreateEncryptor(), CryptoStreamMode.Write);
 
         cryptoStream.Write (rawData, 0, rawData.Length);
         cryptoStream.FlushFinalBlock();
         cryptoStream.Close();
 
         byte[] encrypted =  memoryStream.ToArray();
         memoryStream.Close();
 
         return System.Convert.ToBase64String(encrypted);
     }
 
     public static string Decrypt(string data){
         if(string.IsNullOrEmpty(data)){
             return "";
         }
 
         byte[] rawData = System.Convert.FromBase64String(data);
         if(rawData.Length < 8){
             Debug.Log("Exception");
             throw new System.ArgumentException("Invalid Input data");
         }
 
         Rijndael aes = Rijndael.Create();
         aes.Padding = PaddingMode.PKCS7;
         aes.IV = Encoding.ASCII.GetBytes(k1_1);
         aes.Key = Encoding.ASCII.GetBytes(k2_1);
 
         MemoryStream memoryStream = new MemoryStream();
         CryptoStream cryptoStream = new CryptoStream(memoryStream, aes.CreateDecryptor(), CryptoStreamMode.Write);
         cryptoStream.Write(rawData, 0, rawData.Length);
         cryptoStream.FlushFinalBlock();
         cryptoStream.Close();
 
         byte[] decrypted = memoryStream.ToArray();
         memoryStream.Close();
 
         return Encoding.Unicode.GetString(decrypted);
     } 
 
 }

I am saving and encrypting score on OnTriggerEnter like

 encryptedScore = TripleDESEncryptor.Encrypt(CoinDetection.currentScore.ToString(), true);
 Debug.Log(encryptedScore);

These all are working fine as it should in Unity Editor but not in android device (Didnot checked in iOS). Why? I am hitting my head since 4 days. Please help. Thanks.

enc.jpg (33.5 kB)
Comment
Add comment · Show 1
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Bunny83 · Jan 16, 2018 at 01:52 PM 0
Share

Why do you use TripleDES and Rijndael? Both are outdated algorithms. $$anonymous$$ost crypto provider classes are wrapper classes for native crypto providers. It's possible that TripleDES or Rijndael is not supported on Android. Also keep in $$anonymous$$d that you only have security through obscurity. Using two different algorithms doesn't make the whole thing more secure. Your stored "keys" can be easily retrieved by a cheater.


If you want to stick to your code you may want to add some Debug.Logs in between your code of DataEncryptor.Encrypt to know where you actually get that null reference exception. That might help to pin down what actually went wrong.

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by ajayudin63 · Mar 25 at 03:09 PM

link text


m416-cab-e1cf0901c83466d2641c30c409242060-14138734.txt (8.1 kB)
Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

472 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

Make an object move when clicking a GUI button? 1 Answer

My rigidbody2d is passing through the side of a collider2d but it's working on the top 0 Answers

Using scripts coded in C# on android projects 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges