Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • 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.

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

How to display a video behind gui on mobile 2 Answers

C# Serialization is working fine in Unity but not on Android 2 Answers

Saving JSON file in Android,How to save json file in android 0 Answers


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