Unity中實現檔案加密

2021-10-16 17:46:30 字數 3173 閱讀 6611

常用的檔案加密演算法有:des、aes、rsa、sha-1、md5.....

.net自帶了安全類庫,在system.security.cryptography下有一些常用的加密演算法

其中md5屬於摘要演算法,多用於檢查檔案是否有修改

——對稱加密

對稱加密演算法有aes、des、3des等

在對稱加密演算法中,金鑰只有乙個,加密和解密都使用相同的金鑰

——非對稱加密

非對稱加密演算法有rsa、dsa、ecc等

在非對稱加密演算法中,需要兩個金鑰,乙個公鑰乙個私鑰

如果使用公鑰對資料進行加密,只有使用對應的私鑰才能進行解密,如果使用私鑰對資料進行加密,只有使用對應的公鑰才能進行解密

——簽名加密演算法(雜湊演算法)

簽名加密演算法有sha1、md5、hmac等

簽名加密演算法不需要金鑰,一般不可逆

需要注意的是加密後獲得的bytes千萬別用utf8去獲取字串,不然會有資訊損失,導致後面解密失敗

using system;

using system.security.cryptography;

using system.text;

/// /// aes工具

///

public class aesutils

byte contentbytes = encoding.utf8.getbytes(content);

byte keybytes = encoding.utf8.getbytes(aes_key);

rijndaelmanaged rm = new rijndaelmanaged();

rm.key = keybytes;

rm.mode = ciphermode.ecb;

rm.padding = paddingmode.pkcs7;

icryptotransform ict = rm.createencryptor();

byte resultbytes = ict.transformfinalblock(contentbytes, 0, contentbytes.length);

return convert.tobase64string(resultbytes, 0, resultbytes.length);

}/// /// aes解密

///

/// 密文

public static string decrypt(string content)

byte contentbytes = convert.frombase64string(content);

byte keybytes = encoding.utf8.getbytes(aes_key);

rijndaelmanaged rm = new rijndaelmanaged();

rm.key = keybytes;

rm.mode = ciphermode.ecb;

rm.padding = paddingmode.pkcs7;

icryptotransform ict = rm.createdecryptor();

byte resultbytes = ict.transformfinalblock(contentbytes, 0, contentbytes.length);

return encoding.utf8.getstring(resultbytes);

}}

需要注意的是加密後獲得的bytes千萬別用utf8去獲取字串,不然會有資訊損失,導致後面解密失敗

using system;

using system.security.cryptography;

using system.text;

using system.io;

using unityengine;

/// /// des工具

///

public class desutils

byte contentbytes = encoding.utf8.getbytes(content);

byte keybytes = encoding.utf8.getbytes(des_key);

descryptoserviceprovider provider = new descryptoserviceprovider();

provider.key = keybytes;

provider.iv = keybytes;

memorystream ms = new memorystream();

cryptostream cs = new cryptostream(ms, provider.createencryptor(), cryptostreammode.write);

cs.write(contentbytes, 0, contentbytes.length);

cs.flushfinalblock();

return convert.tobase64string(ms.toarray());

}/// /// des解密

///

/// 密文

public static string decrypt(string content)

byte contentbytes = convert.frombase64string(content);

byte keybytes = encoding.utf8.getbytes(des_key);

descryptoserviceprovider provider = new descryptoserviceprovider();

provider.key = keybytes;

provider.iv = keybytes;

memorystream ms = new memorystream();

cryptostream cs = new cryptostream(ms, provider.createdecryptor(), cryptostreammode.write);

cs.write(contentbytes, 0, contentbytes.length);

cs.flushfinalblock();

return encoding.utf8.getstring(ms.toarray());

}}

unity夾克加密 unity加密方案

分成c sdk 和c dll so 加解密流程 c new乙個新類,初始化的時候傳入key c 通過setstring方法傳入待加密或者解密字串 c 通過run方法,傳遞要求加密 0 或者解密 1 c 通過getstring方法獲取加密或者解密結果 dll c 功能 核心加解密函式 金鑰保密 key...

Unity中實現解析CSV檔案

在我們的專案開發過程中,策劃們可能會配置很多的資料在一些文字文字中,例如 物品,隨機名稱等,往往這些資料會放在不同的csv檔案中 逗號分隔值 comma separated values 其檔案以純文字形式儲存 資料,資料與資料之間用英文逗號分割 下面兩張圖為excel 形式轉換為csv形式 建立e...

Unity中實現檢測檔案是否需要更新

可以使用md5值去判斷檔案是否有更新,每乙個檔案都對應著乙個唯一的md5碼 我們可以儲存當前檔案的md5值,當每次進入遊戲時再次獲取此檔案的md5值與儲存的md5值進行比對,如果不一致則需要更新 using system using system.security.cryptography usin...