程序加密源代碼
加密和解密演算法是程序編制中的重要一環。試想,如果我們平時使用的騰訊QQ、支付寶支付密碼、今日頭條賬號密碼那麼輕易就被別人盜取的話,很多不可以預料的事情就會發生!
在現實生活中,我們遇到過太多QQ密碼被盜取的情況,有的朋友QQ被盜之後,騙子利用朋友間信任騙取錢財的事情屢見不鮮。支付寶也曾出現過支付寶賬戶被惡意盜取的事件,對用戶利益造成了嚴重損害!這些在技術上都指向了同一相關問題:軟體加密演算法的強壯程度。今天,小編利用C語言來簡單實現一種加密方法。下面是源代碼。
需要說明:程序利用了ascii碼值的按照一定規律變換實現加密,對於解密過程,則是加密的逆過程。下面是程序的運行結果。
4190閱讀
搜索
編程免費課程300節
初學編程100個代碼
java自學一般要學多久
5秒破解excel密碼
python必背100源代碼
40歲零基礎學編程
B. 如何給c/c++源代碼加密
#include#include#includevoid findKey(char* key, char* mark){int len = strlen(key);int i = 0;int j = 0;memset(mark,0,26);for (i = 0; i 96){encrypt[i] = map[encrypt[i] - 97];}}outputFile = fopen("output.txt", "w+");fwrite(encrypt,nFileLen,1,outputFile);printf("加密的密文:%s\n", encrypt);fclose(outputFile);fclose(inputFile);free(encrypt);system("pause");return 0;}
C. 如何給源碼加密
部署合力天下數據防泄密系統,對源代碼加密,啟用保密U盤,SVN 伺服器准入控制,實現源碼只能在公司運行,復制粘貼到微信,QQ,郵件亂碼,個人U盤插入公司計算機無法識別,私自帶出公司打開亂碼。
上傳到SVN伺服器文檔自動解密,下載到客戶機文檔自動加密,沒有安裝防泄密軟體的計算機無法接入到SVN伺服器。
D. Oracle下如何用wrap加密自己的源代碼
可以使用wrap 工具或者DBMS_DDL子程序對PL/sql源碼進行加密。wrap工具加密單個源文件,如SQL*Plus腳本。DBMS_DDL子程序加密單個動態生成的PL/SQL單元,如一個CREATE PROCEDURE聲明。加密的源文件可以移動,備份,可被SQL*Plus和Improt和Export工具處理,但在靜態數據字典視圖*_SOURCE中無法看到源碼。 WRAP語法 wrap iname=input_file [oname=output_file ] 可省略文件擴展名,如以下的命令是等同的: wrap iname=/mydir/myfile wrap iname=/mydir/myfile.sql 輸出文件默認的擴展名為.plb,當然你也可以指定不同的文件名和擴展名。 wrap iname=/mydir/myfile oname=/yourdir/yourfile.out wrap主要是混淆PL/SQL語句的主體部分,如下CREATE語句可以被加密: CREATE [OR REPLACE] FUNCTION function_name
CREATE [OR REPLACE] PROCEDURE procere_name
CREATE [OR REPLACE] PACKAGE package_name
CREATE [OR REPLACE] PACKAGE BODY package_name
CREATE [OR REPLACE] TYPE type_name AS OBJECT
CREATE [OR REPLACE] TYPE type_name UNDER type_name
CREATE [OR REPLACE] TYPE BODY type_name CREATE [OR REPLACE] TRIGGER語句不能被加密,但你可調用加密的過程。加密文件中除了語句頭部和C風格(/*…*/)注釋外,其它所有注釋被刪除。
E. 源代碼加密哪個軟體好
源代碼加密軟體推薦使用賽虎信息科技的綠盾加密軟體,是一套從源頭上保障數據安全和使用安全的軟體系統。採用的是文件透明加密模塊,對平常辦公使用是沒有影響的。而且綠盾支持與SVN等源代碼管理工具無縫結合。
如果企業內部SVN伺服器採取透明模式,即加密文件是可以存放在SVN伺服器上的,需要達到的效果是SVN伺服器上文件密文存儲。則配合天銳綠盾應用伺服器安全接入系統來實現只有安裝了加密客戶端的Windows、Linux、MAC端才能夠正常的訪問公司內部的SVN伺服器。
如果企業內部採用eclipse、VS等開發工具,從這些開發工具將代碼直接上傳到SVN伺服器上時會自動解密。為了避免明文、密文混亂存放導致版本比對時出現錯誤等問題。因此,SVN伺服器上需統一存放明文文件。則通過伺服器白名單功能實現對終端電腦數據進行強制透明加密,對上傳到應用伺服器數據實現上傳自動解密、下載自動加密。再配合天銳綠盾應用伺服器安全接入系統實現只有安裝了加密客戶端的Windows、Linux、MAC端才能夠正常的訪問公司內部的SVN伺服器。
賽虎信息科技為客戶提供優質的內網安全管理產品和適合多種行業的應用解決方案。
F. 如何對公司的源代碼加密
對公司源代碼加密的話 我推薦使用域之盾軟體 以下是軟體加密的具體流程 希望可以幫到你。
1,首先安裝軟體 安裝完成後 開啟 透明加密。對重要文件進行加密。
2,通過 軟體限制陌生u盤的試用,設置只讀或禁止使用。對常用U盤設置白名單
3,開啟軟體的外發審核,外發的一切文件資料 等 需要管理員審核否則非法外發 即為亂碼。
G. c#怎麼給源代碼加密,就是就算給別人源代碼
c# dll 加密最快的方法使用加殼工具Virbox Protector,直接加密,Virbox Protectorke可以對dll進行性能分析,分析每個函數的調用次數,對每個函數選擇保護方式如:混淆/虛擬化/碎片化/代碼加密等;每種加密方法的特點是什麼呢?
代碼加密(X86):
針對X86匯編代碼:一種代碼自修改技術(SMC)保護代碼。把當前代碼加密存儲為密文,存儲起來,當程序運行到被保護函數時候自動解密並且執行,執行之後再擦除代碼,運行到哪裡才解密哪裡的代碼,黑客無法獲得原始機器指令和內存完整性的代碼,由於是純內存操作所以運行速度快, 性價高的保護手段,建議全加
代碼加密(IL)
針對dotNet程序,保護IL代碼:一種動態運行方法解密被保護代碼。把當前代碼加密存儲為密文,存儲起來,當程序運行到被保護函數時候自動解密並且執行,執行之後再擦除代碼,執行之後再擦除代碼,運行到哪裡才解密哪裡的代碼,黑客無法獲得原始的中間語言的指令和內存完整性的代碼,由於是純內存操作所以運行速度快, 性價高的保護手段,建議全加
壓縮
類似zip等壓縮軟體把代碼和數據段壓縮,由於帶有動態密碼,沒有任何工具可以自動脫殼,是防止反編譯和反匯編關鍵手段。
代碼混淆(IL):
將代碼中的各種元素,如變數,函數,類的名字改寫成無意義的名字。比如改寫成單個字母,或是簡短的無意義字母組合,甚至改寫成「__」這樣的符號,使得閱讀的人無法根據名字猜測其用途。
a)重寫代碼中的部分邏輯,將其變成功能上等價,但是更難理解的形式。比如將for循環改寫成while循環,將循環改寫成遞歸,精簡中間變數,等等。
b) 打亂代碼的格式。比如刪除空格,將多行代碼擠到一行中,或者將一行代碼斷成多行等等。
c) 添加花指令,通過特殊構造的指令來使得反匯編器出錯,進而干擾反編譯工作的進行。
代碼混淆器也會帶來一些問題。主要的問題包括:· 被混淆的代碼難於理解,因此調試除錯也變得困難起來。開發人員通常需要保留原始的未混淆的代碼用於調試。· 對於支持反射的語言,代碼混淆有可能與反射發生沖突。· 代碼混淆並不能真正阻止反向工程,只能增大其難度。因此,對於對安全性要求很高的場合,僅僅使用代碼混淆並不能保證源代碼的安全。
代碼混淆的特點是安全度低、不會影響效率。
代碼虛擬化:
針對X86代碼: 是指將機器代碼翻譯為機器和人都無法識別的一串偽代碼位元組流;在具體執行時再對這些偽代碼進行一一翻譯解釋,逐步還原為原始代碼並執行。 這段用於翻譯偽代碼並負責具體執行的子程序就叫作虛擬機VM(好似一個抽象的CPU)。它以一個函數的形式存在,函數的參數就是位元組碼的內存地址。 由於虛擬機代碼和虛擬機CPU的實現可以做到每次都是隨機設計和隨機執行 並且代碼每次可以隨機變化,包括一些邏輯上的等價變化可以參考硬體N個與非門NOT-AND實現各種邏輯門,演算法和訪問內存形式的變化,包括數學上的非等價變化,代碼體積幾乎可以膨脹達到100到10000倍,造成機器無法做演算法還原到原有邏輯。
代碼虛擬化的特點是:安全度中、不會影響效率。
代碼碎片化:
深思自主知識產權的最新技術:基於 LLVM 和 ARM 虛擬機技術,自動抽取海量代碼移入 SS 內核態模塊,極大的降低了使用門檻, 不再需要手動移植演算法,可移植的演算法從有限的幾個增長到幾乎無限多,支持的語言也不再限於 C, 這是加密技術的一次綜合應用,效果上類似於將軟體打散執行,讓破解者無從下手。
安全度高、建議關鍵函數或調用加密鎖方法;使用太多會影響效率
H. VB 加密與解密的程序代碼
加密:
PrivateFunction JiaMi(ByVal varPass As String) As String '參數varPass是需要加密的文本內容
Dim varJiaMi As String * 20
Dim varTmp As Double
Dim strJiaMi As String
Dim I
For I = 1 To Len(varPass)
varTmp = AscW(Mid$(varPass, I, 1))
varJiaMi = Str$(((((varTmp * 1.5) / 5.6) * 2.7) * I))
strJiaMi = strJiaMi & varJiaMi
NextI
JiaMi = strJiaMi
EndFunction
解密函數:
PrivateFunction JieMi(ByVal varPass As String) As String '參數varPass是需要解密的密文內容
Dim varReturn As String * 20
Dim varConvert As Double
Dim varFinalPass As String
Dim varKey As Integer
Dim varPasslenth As Long
varPasslenth = Len(varPass)
For I = 1 To varPasslenth / 20
varReturn = Mid(varPass, (I - 1) * 20 + 1, 20)
varConvert = Val(Trim(varReturn))
varConvert = ((((varConvert / 1.5) * 5.6) / 2.7) / I)
varFinalPass = varFinalPass & ChrW(Val(varConvert))
NextI
JieMi = varFinalPass
EndFunction
(8)程序加密源代碼擴展閱讀:
注意事項
編寫加密程序,將用戶輸入的一個英文句子加密為加密字元串,然後輸出加密字元串。假設句子長度不超過100個字元。
根據給定的句子加密函數原型SentenceEncoding,編寫函數SentenceEncoding調用給定的字元加密函數CharEncoding完成句子加密。
然後,編寫主程序提示用戶輸入英文句子,然後調用函數SentenceEncoding對句子加密,最後輸出加密後的句子。
字元加密規則為大寫字母和小寫字母均加密為其補碼, 我們定義ASCII碼值相加為』A』+』Z』即155的兩個大寫字母互為補碼,ASCII碼值相加為』a』+』z』即219的兩個小寫字母互為補碼。
空格用@代替,句號以#代替,其它字元用句點代替。
函數原型:
void SentenceEncoding(char *soure,char *code);
功能:對待加密字元串source加密後保存加密字元串到code.
參數:char *soure,指向待加密句子的字元串指針;
char *code 指向加密字元串的字元串指針;
字元加密函數代碼。
I. JAVA簡單文件加密 求JAVA源代碼
md5加密:
package com.ncs.pki.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Test {
private static MessageDigest digest = null;
public synchronized static final String hash(String data) {
if (digest == null) {
try {
digest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException nsae) {
System.err.println(
"Failed to load the MD5 MessageDigest. "
+ "Jive will be unable to function normally.");
nsae.printStackTrace();
}
}
// Now, compute hash.
digest.update(data.getBytes());
return encodeHex(digest.digest());
}
public static final String encodeHex(byte[] bytes) {
StringBuffer buf = new StringBuffer(bytes.length * 2);
int i;
for (i = 0; i < bytes.length; i++) {
if (((int) bytes[i] & 0xff) < 0x10) {
buf.append("0");
}
buf.append(Long.toString((int) bytes[i] & 0xff, 16));
}
return buf.toString();
}
public static String test(){
return null;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(MD5Test.hash("123456"));
}
}
3des加密:
package com.ncs.pki.util;
import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class DesEncrypt {
/**
*
* 使用DES加密與解密,可對byte[],String類型進行加密與解密 密文可使用String,byte[]存儲.
*
* 方法: void getKey(String strKey)從strKey的字條生成一個Key
*
* String getEncString(String strMing)對strMing進行加密,返回String密文 String
* getDesString(String strMi)對strMin進行解密,返回String明文
*
*byte[] getEncCode(byte[] byteS)byte[]型的加密 byte[] getDesCode(byte[]
* byteD)byte[]型的解密
*/
Key key;
/**
* 根據參數生成KEY
*
* @param strKey
*/
public void getKey(String strKey) {
try {
KeyGenerator _generator = KeyGenerator.getInstance("DES");
_generator.init(new SecureRandom(strKey.getBytes()));
this.key = _generator.generateKey();
_generator = null;
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 加密String明文輸入,String密文輸出
*
* @param strMing
* @return
*/
public String getEncString(String strMing) {
byte[] byteMi = null;
byte[] byteMing = null;
String strMi = "";
BASE64Encoder base64en = new BASE64Encoder();
try {
byteMing = strMing.getBytes("UTF8");
byteMi = this.getEncCode(byteMing);
strMi = base64en.encode(byteMi);
} catch (Exception e) {
e.printStackTrace();
} finally {
base64en = null;
byteMing = null;
byteMi = null;
}
return strMi;
}
/**
* 解密 以String密文輸入,String明文輸出
*
* @param strMi
* @return
*/
public String getDesString(String strMi) {
BASE64Decoder base64De = new BASE64Decoder();
byte[] byteMing = null;
byte[] byteMi = null;
String strMing = "";
try {
byteMi = base64De.decodeBuffer(strMi);
byteMing = this.getDesCode(byteMi);
strMing = new String(byteMing, "UTF8");
} catch (Exception e) {
e.printStackTrace();
} finally {
base64De = null;
byteMing = null;
byteMi = null;
}
return strMing;
}
/**
* 加密以byte[]明文輸入,byte[]密文輸出
*
* @param byteS
* @return
*/
private byte[] getEncCode(byte[] byteS) {
byte[] byteFina = null;
Cipher cipher;
try {
cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byteFina = cipher.doFinal(byteS);
} catch (Exception e) {
e.printStackTrace();
} finally {
cipher = null;
}
return byteFina;
}
/**
* 解密以byte[]密文輸入,以byte[]明文輸出
*
* @param byteD
* @return
*/
private byte[] getDesCode(byte[] byteD) {
Cipher cipher;
byte[] byteFina = null;
try {
cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, key);
byteFina = cipher.doFinal(byteD);
} catch (Exception e) {
e.printStackTrace();
} finally {
cipher = null;
}
return byteFina;
}
public static void main(String[] args) {
System.out.println("des demo");
DesEncrypt des = new DesEncrypt();// 實例化一個對像
des.getKey("MYKEY");// 生成密匙
System.out.println("key=MYKEY");
String strEnc = des.getEncString("111111");// 加密字元串,返回String的密文
System.out.println("密文=" + strEnc);
String strDes = des.getDesString(strEnc);// 把String 類型的密文解密
System.out.println("明文=" + strDes);
}
}
J. VB如何給源代碼加密
把函數封裝到DLL里 直接加密不了 用記事本都能看VB源代碼