當前位置:首頁 » 密碼管理 » byte加密

byte加密

發布時間: 2022-04-18 15:20:50

加密後的byte數組轉換String後,再轉回 byte數組,會出現數據流失的情況,如何解決~

從簡單地說起,bytes->str->bytes,必須要保證編碼的統一,比如統一用UTF8
如果這個不是問題
我不知道你說的字元串是不是類似於
byte[] bs = {1,2,3,4};
String s = new String(bs);
然後傳輸或其它的的操作後再s.getBytes();

個人建議用這樣的辦法,用兩個字元代表一個byte的16進制
比如:byte[] bs = {1,2,3,4,17,32};
轉換後的字元串是:010203041120

⑵ 急,請教關於加密演算法,密文要求是8個位元組

既然有演算法,自己試一下不就知道了?16位元組就是128位,AES是按128位分組加密,你說應該輸出是多少呢?呵呵

java如何加密int類型數據

String加密 實際上也是對String的 byte[] 加密。

通常一種加密演算法,都針對的是位元組數組,而非String 或者int。
因為所有上述這些類型都可以用 byte[]表示,只要開發一次就可以針對所有類型加密了

把int轉化成 byte[]加密就可以了
byte[4] intbytes = new byte[4]; 然後用位移運算,得到int的每一個byte
int value = 1000 ;

intbytes[0] = (byte)(value & 0x000000FF)
intbytes[1] = (byte)((value & 0x0000FF00) >> 8)
intbytes[2] = (byte)((value & 0x00FF0000) >> 16)
......

String換算成byte就更容易了 String.getBytes("utf-8") ; 參數是字元集名字 可以不用指定,但是你就不確定它到底用的哪種字元集。

⑷ 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);
}
}

⑸ 國際數據加密演算法的演算法簡介

IDEA加密演算法簡介
IDEA(International Data Encryption Algorithm)在密碼學中屬於數據塊加密演算法(Block Cipher)類。IDEA使用長度為128bit的密鑰,數據塊大小為64bit。從理論上講,IDEA屬於「強」加密演算法,至今還沒有出現對該演算法的有效攻擊演算法。
早在1990年,Xuejia Lai等人在EuroCrypt』90年會上提出了分組密碼建議PES(Proposed Encryption Standard)。在EuroCrypt』91年會上,Xuejia Lai等人又提出了PES的修正版IPES(Improved PES)。目前IPES已經商品化,並改名為IDEA。IDEA已由瑞士的Ascom公司注冊專利,以商業目的使用IDEA演算法必須向該公司申請許可。
IDEA是一種由8個相似圈(Round)和一個輸出變換(Output Transformation)組成的迭代演算法。IDEA的每個圈都由三種函數:模(216+1)乘法、模216加法和按位XOR組成。
在加密之前,IDEA通過密鑰擴展(Key Expansion)將128bit的密鑰擴展為52Byte的加密密鑰EK(Encryption Key),然後由EK計算出解密密鑰DK(Decryption Key)。EK和DK分為8組半密鑰,每組長度為6Byte,前8組密鑰用於8圈加密,最後半組密鑰(4Byte)用於輸出變換。IDEA的加密過程和解密過程是一樣的,只不過使用不同的密鑰(加密時用EK,解密時用DK)。
密鑰擴展的過程如下:
1. 將128bit的密鑰作為EK的前8byte;
2. 將前8byte循環左移25bit,得到下一8byte,將這個過程循環7次;
3. 在第7次循環時,取前4byte作為EK的最後4byte;
4. 至此52byte的EK生成完畢。
密鑰擴展的過程如表1所示,為了能夠清楚的看出每個8Byte的關系,在表1中用粗線條將將每個8Byte劃分開了.
IDEA演算法相對來說是一個比較新的演算法,其安全性研究也在不斷進行之中。在IDEA演算法公布後不久,就有學者指出:IDEA的密鑰擴展演算法存在缺陷,導致在IDEA演算法中存在大量弱密鑰類,但這個弱點通過簡單的修改密鑰擴展演算法(加入異或運算元)即可克服。在1997年的EuroCrypt』97年會上,John Borst等人提出了對圈數減少的IDEA的兩種攻擊演算法:對3.5圈IDEA的截短差分攻擊(Truncate Diffrential Attack)和對3圈IDEA的差分線性攻擊(Diffrential Linear Attack)。但作者也同時指出,這兩種攻擊演算法對整8.5圈的IDEA演算法不可能取得實質性的攻擊效果。目前尚未出現新的攻擊演算法,一般認為攻擊整8.5圈IDEA演算法唯一有效的方法是窮盡搜索128bit的密鑰空間。

⑹ 一個字元串用RSA公鑰加密為byte[],在用base64 加密成String,在用base64 解密為String

俺有類似的函數,核心加密是用des

原型:
int WINAPI icePub_encryptText3(char *strInput, char *strOutputHexstring, char *strKey)
輸入:strInput 待加密文本數據串
strKey 密鑰,任意長度
輸出:strOutputHexstring 加密後base64串
返回碼:

原型:
int WINAPI icePub_decryptText3(char *strInputHexstring, char *strOutput, char *strKey)
輸入:strInputHexstring 待解密數據串
strKey 密鑰,任意長度
輸出:strOutput 解密後數據
返回碼: 解密後數據最大長度,為8的倍數

Private Declare Function icePub_encryptText3 Lib "icePubDll.dll" (ByVal strInput As String,ByVal strOutputHexstring As String, ByVal strKey As String) As Integer

Dim len2 As Integer
Dim buff As String
Dim buff2 As String
Dim key As String

buff="Recall Dream Miss, Keep Silk-silk accept as a souvenir, Between You And Me, Stringed music touching."
key="2286766486"
buff2=Space(1024)
len2=icePub_encryptionText3(buff,buff2,key)

MsgBox buff2

Private Declare Function icePub_decryptText3 Lib "icePubDll.dll" (ByVal strInputHexstring As String, ByVal strOutput As String, ByVal strKey As String) As Integer

Dim len2 As Integer
Dim buff As String
Dim buff2 As String
Dim key As String

buff="vVVq0eaCUs8="
key="11223344"
buff2=Space(1024)
len2= icePub_decryptText3(buff,buff2,key)
MsgBox buff2

⑺ c#中,如何將含有字母和數字的字元串加密成一個全是字母的字元串,並解密

publicclassStringEncrypt
{
///<summary>
///使用預設密鑰字元串加密
///</summary>
///<paramname="original">明文</param>
///<returns>密文</returns>
publicstaticstringEncrypt(stringoriginal)
{
returnEncrypt(original,"xyzABc*$!");
}
///<summary>
///使用預設密鑰解密
///</summary>
///<paramname="original">密文</param>
///<returns>明文</returns>
publicstaticstringDecrypt(stringoriginal)
{
returnDecrypt(original,"xyzABc*$!",System.Text.Encoding.Default);
}
///<summary>
///使用給定密鑰解密
///</summary>
///<paramname="original">密文</param>
///<paramname="key">密鑰</param>
///<returns>明文</returns>
publicstaticstringDecrypt(stringoriginal,stringkey)
{
returnDecrypt(original,key,System.Text.Encoding.Default);
}
///<summary>
///使用預設密鑰解密,返回指定編碼方式明文
///</summary>
///<paramname="original">密文</param>
///<paramname="encoding">編碼方式</param>
///<returns>明文</returns>
publicstaticstringDecrypt(stringoriginal,Encodingencoding)
{
returnDecrypt(original,"xyzABc*$!",encoding);
}
///<summary>
///使用給定密鑰加密
///</summary>
///<paramname="original">原始文字</param>
///<paramname="key">密鑰</param>
///<paramname="encoding">字元編碼方案</param>
///<returns>密文</returns>
publicstaticstringEncrypt(stringoriginal,stringkey)
{
byte[]buff=System.Text.Encoding.Default.GetBytes(original);
byte[]kb=System.Text.Encoding.Default.GetBytes(key);
returnConvert.ToBase64String(Encrypt(buff,kb));
}

///<summary>
///使用給定密鑰解密
///</summary>
///<paramname="encrypted">密文</param>
///<paramname="key">密鑰</param>
///<paramname="encoding">字元編碼方案</param>
///<returns>明文</returns>
publicstaticstringDecrypt(stringencrypted,stringkey,Encodingencoding)
{
byte[]buff=Convert.FromBase64String(encrypted);
byte[]kb=System.Text.Encoding.Default.GetBytes(key);
returnencoding.GetString(Decrypt(buff,kb));
}
///<summary>
///生成MD5摘要
///</summary>
///<paramname="original">數據源</param>
///<returns>摘要</returns>
publicstaticbyte[]MakeMD5(byte[]original)
{
=newMD5CryptoServiceProvider();
byte[]keyhash=hashmd5.ComputeHash(original);
hashmd5=null;
returnkeyhash;
}

///<summary>
///使用給定密鑰加密
///</summary>
///<paramname="original">明文</param>
///<paramname="key">密鑰</param>
///<returns>密文</returns>
publicstaticbyte[]Encrypt(byte[]original,byte[]key)
{
=();
des.Key=MakeMD5(key);
des.Mode=CipherMode.ECB;

returndes.CreateEncryptor().TransformFinalBlock(original,0,original.Length);
}

///<summary>
///使用給定密鑰解密數據
///</summary>
///<paramname="encrypted">密文</param>
///<paramname="key">密鑰</param>
///<returns>明文</returns>
publicstaticbyte[]Decrypt(byte[]encrypted,byte[]key)
{
=();
des.Key=MakeMD5(key);
des.Mode=CipherMode.ECB;

returndes.CreateDecryptor().TransformFinalBlock(encrypted,0,encrypted.Length);
}

///<summary>
///使用給定密鑰加密
///</summary>
///<paramname="original">原始數據</param>
///<paramname="key">密鑰</param>
///<returns>密文</returns>
publicstaticbyte[]Encrypt(byte[]original)
{
byte[]key=System.Text.Encoding.Default.GetBytes("xyzABc*$!");
returnEncrypt(original,key);
}

///<summary>
///使用預設密鑰解密數據
///</summary>
///<paramname="encrypted">密文</param>
///<paramname="key">密鑰</param>
///<returns>明文</returns>
publicstaticbyte[]Decrypt(byte[]encrypted)
{
byte[]key=System.Text.Encoding.Default.GetBytes("xyzABc*$!");
returnDecrypt(encrypted,key);
}
}

⑻ C# aes加密後返回的byte[]先Encoding.UTF8.GetString再Encoding.UTF8.GetBytes後和原來的值不一樣

你自己都說了,加密之後的得出來不一樣,你都加密了,那個byte[]中的數據早就變化得不像樣了。
加密之後的數組不能直接轉成字元串的,要轉成16進制的字元

⑼ JAVA Byte數組轉int數組 加密用的

label27:int j這一行不符合Java的語法規范,肯定是編譯通不過。

⑽ 什麼是對稱加密演算法請舉例

對稱加密演算法簡介:
對稱加密演算法 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,數據發信方將明文(原始數據)和加密密鑰一起經過特殊加密演算法處理後,使其變成復雜的加密密文發送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的密鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文。在對稱加密演算法中,使用的密鑰只有一個,發收信雙方都使用這個密鑰對數據進行加密和解密,這就要求解密方事先必須知道加密密鑰。
特點:
對稱加密演算法的特點是演算法公開、計算量小、加密速度快、加密效率高。
不足之處是,交易雙方都使用同樣鑰匙,安全性得不到保證。此外,每對用戶每次使用對稱加密演算法時,都需要使用其他人不知道的惟一鑰匙,這會使得發收信雙方所擁有的鑰匙數量成幾何級數增長,密鑰管理成為用戶的負擔。對稱加密演算法在分布式網路系統上使用較為困難,主要是因為密鑰管理困難,使用成本較高。而與公開密鑰加密演算法比起來,對稱加密演算法能夠提供加密和認證卻缺乏了簽名功能,使得使用范圍有所縮小。在計算機專網系統中廣泛使用的對稱加密演算法有DES和IDEA等。美國國家標准局倡導的AES即將作為新標准取代DES。
具體演算法:
3DES演算法,Blowfish演算法,RC5演算法。 對稱加密演算法-原理及應用對稱加密演算法的優點在於加解密的高速度和使用長密鑰時的難破解性。假設兩個用戶需要使用對稱加密方法加密然後交換數據,則用戶最少需要2個密鑰並交換使用,如果企業內用戶有n個,則整個企業共需要n×(n-1) 個密鑰,密鑰的生成和分發將成為企業信息部門的惡夢。對稱加密演算法的安全性取決於加密密鑰的保存情況,但要求企業中每一個持有密鑰的人都保守秘密是不可能的,他們通常會有意無意的把密鑰泄漏出去——如果一個用戶使用的密鑰被入侵者所獲得,入侵者便可以讀取該用戶密鑰加密的所有文檔,如果整個企業共用一個加密密鑰,那整個企業文檔的保密性便無從談起。DESCryptoServiceProvider
RC2CryptoServiceProvider
RijndaelManaged

//例加密文本文件(RijndaelManaged )
byte[] key = { 24, 55, 102,24, 98, 26, 67, 29, 84, 19, 37, 118, 104, 85, 121, 27, 93, 86, 24, 55, 102, 24,98, 26, 67, 29, 9, 2, 49, 69, 73, 92 };
byte[] IV ={ 22, 56, 82, 77, 84, 31, 74, 24,55, 102, 24, 98, 26, 67, 29, 99 };
RijndaelManaged myRijndael = new RijndaelManaged();
FileStream fsOut = File.Open(strOutName, FileMode.Create,FileAccess.Write);//strOutName文件名及路徑 FileStream fsIn = File.Open(strPath, FileMode.Open,FileAccess.Read);
CryptoStream csDecrypt=new CryptoStream(fsOut,myRijndael.CreateEncryptor(key, IV),CryptoStreamMode.Write);//讀加密文本
BinaryReader br = new BinaryReader(fsIn);
csDecrypt.Write(br.ReadBytes((int)fsIn.Length),0, (int)fsIn.Length);
csDecrypt.FlushFinalBlock();
csDecrypt.Close();
fsIn.Close();
fsOut.Close();
//解密文件
byte[] key = { 24, 55, 102, 24, 98, 26, 67, 29, 84, 19, 37, 118,104, 85, 121, 27, 93, 86, 24, 55, 102, 24, 98, 26, 67, 29, 9, 2, 49, 69, 73, 92};
byte[] IV ={ 22, 56, 82, 77, 84, 31, 74, 24, 55, 102, 24, 98, 26,67, 29, 99 };
RijndaelManaged myRijndael = new RijndaelManaged();
FileStream fsOut = File.Open(strPath, FileMode.Open, FileAccess.Read);
CryptoStream csDecrypt = new CryptoStream(fsOut, myRijndael.CreateDecryptor(key,IV), CryptoStreamMode.Read);
StreamReader sr = new StreamReader(csDecrypt);//把文件讀出來
StreamWriter sw = new StreamWriter(strInName);//解密後文件寫入一個新的文件
sw.Write(sr.ReadToEnd());
sw.Flush();
sw.Close();
sr.Close();f
sOut.Close();
用圖片加密(RC2CryptoServiceProvider )
FileStreamfsPic = new FileStream(pictureBox1.ImageLocation,FileMode.Open, FileAccess.Read);
//加密文件流(textBox1.Text是文件名及路徑)
FileStream fsText = new FileStream(textBox1.Text, FileMode.Open,FileAccess.Read);
byte[] bykey = new byte[16]; //初始化
Key IVbyte[] byIv = new byte[8];
fsPic.Read(bykey, 0, 16);
fsPic.Read(byIv, 0, 8);
RC2CryptoServiceProvider desc = newRC2CryptoServiceProvider();//desc進行加密
BinaryReader br = new BinaryReader(fsText);//從要加密的文件中讀出文件內容
FileStream fsOut = File.Open(strLinPath,FileMode.Create, FileAccess.Write); // strLinPath臨時加密文件路徑CryptoStream cs = new CryptoStream(fsOut, desc.CreateEncryptor(bykey,byIv), CryptoStreamMode.Write);//寫入臨時加密文件
cs.Write(br.ReadBytes((int)fsText.Length),0, (int)fsText.Length);//寫入加密流
cs.FlushFinalBlock();
cs.Flush();
cs.Close();
fsPic.Close();
fsText.Close();
fsOut.Close();
用圖片解密
FileStream fsPic = new FileStream(pictureBox1.ImageLocation, FileMode.Open, FileAccess.Read); //圖片流FileStream fsOut = File.Open(textBox1.Text,FileMode.Open, FileAccess.Read);//解密文件流
byte[] bykey = new byte[16]; //初始化
Key IVbyte[] byIv = new byte[8];
fsPic.Read(bykey, 0, 16);
fsPic.Read(byIv, 0, 8);
string strPath = textBox1.Text;//加密文件的路徑
int intLent = strPath.LastIndexOf("\\")+ 1;
int intLong = strPath.Length;
string strName = strPath.Substring(intLent, intLong - intLent);//要加密的文件名稱
string strLinPath = "C:\\"+ strName;//臨時解密文件路徑
FileStream fs = new FileStream(strLinPath, FileMode.Create,FileAccess.Write);
RC2CryptoServiceProvider desc = newRC2CryptoServiceProvider();//desc進行解密
CryptoStream csDecrypt = new CryptoStream(fsOut, desc.CreateDecryptor(bykey,byIv), CryptoStreamMode.Read);
//讀出加密文件
BinaryReader sr = new BinaryReader(csDecrypt);//從要加密流中讀出文件內容
BinaryWriter sw = new BinaryWriter(fs);//寫入解密流
sw.Write(sr.ReadBytes(Convert.ToInt32(fsOut.Length)));
//sw.Flush();
sw.Close();
sr.Close();
fs.Close();
fsOut.Close();
fsPic.Close();
csDecrypt.Flush();
File.Delete(textBox1.Text.TrimEnd());//刪除原文件
File.Copy(strLinPath, textBox1.Text);//復制加密文件
File.Delete(strLinPath);//刪除臨時文件

熱點內容
win8windows無法訪問 發布:2025-05-16 00:37:53 瀏覽:894
八種排序演算法 發布:2025-05-16 00:37:17 瀏覽:55
左旋螺紋數控編程實例 發布:2025-05-16 00:11:49 瀏覽:10
安卓游戲舊版本從哪個軟體下載 發布:2025-05-16 00:00:20 瀏覽:329
連接聚類演算法 發布:2025-05-15 23:55:09 瀏覽:978
工資演算法單休 發布:2025-05-15 23:52:30 瀏覽:819
超凡先鋒配置不行怎麼辦 發布:2025-05-15 23:27:54 瀏覽:532
win7取消加密 發布:2025-05-15 23:26:37 瀏覽:472
不用internet打開ftp 發布:2025-05-15 23:06:00 瀏覽:154
sql字元串取數字 發布:2025-05-15 22:57:45 瀏覽:125