當前位置:首頁 » 編程語言 » java數字加密

java數字加密

發布時間: 2023-05-27 13:16:06

java 中 url地址欄里傳的數字值,如何加密

現在很多加密演算法的 比如你可以使用XXTea加密。前端使用post請求,請求之前將你要傳的參數 組合成一個json格式,之後進行XXTea加密,加密完之後 將加密得到的字元串放到post 請求數據中。後台加一個攔截器,拿到你的請求地址以及加密字元串,然後將字元串解密 得到一個map,再通過request得到的ParamRequestWrapper 將解密後的參數放回去,這樣你的方法就可以照常拿到數據了。

⑵ 用java做數字加密,思路如下:輸入一個四位數,每位相加,1~9分別代表ASC中的a~i

import java.util.Scanner;
public class Encpryt {

public Encpryt() {
Scanner scan = new Scanner(System.in);
System.out.println("輸入一個四位數:");
String str = scan.next();

while(str != "q"){
if (str.length()!=4) {
System.out.println("您輸入的不是4位的數字請重新輸入");
str = scan.next();
continue;
}
System.out.println("加密後的數是:");
char[] ns = new char[4];
for(int i = 0; i < 4; i++){
ns[i] = str.charAt(i);
System.out.println(ns[i] -'0' + 'a' - 1);
}
System.out.println("輸入一個四位數:");
str = scan.next();
}
}

/** * @param args
*/
public static void main(String[] args) {
new Encpryt();

}
}

⑶ 如何用java對數據加密,生成的密文是唯一的

用戶提供的是明文,資料庫裡面存儲的是密文
不管怎麼樣,加密也好,解密也好,如果要比較相等性,這兩個過程肯定要有一個,這個是沒有選擇的,需要提高性能的話只能做兩點:
1、將用戶的明文加密為密文後再與資料庫中的比較,原因是這樣只加密一次就可以,如果解密的話就要把資料庫的密文全部解密,這是不現實的
2、在密文所在的列上建立索引,增加搜索速度,這個速度增長是很顯著的,雖然會失去一些插入性能。
3、將對應的SQL寫成存儲過程。省去預編譯的時間。這個速度的提高也是很明顯的。
至於你說的「怎麼能保證不一樣得明文加密後生成不一樣得密文」
MD5就可以
MD5有兩個特性:
1、任意兩段明文數據,加密以後的密文不會是相同的
2、任意一段明文數據,經過加密以後,其結果永遠是不變的
網上MD5加密的類應該有寫好的
大致上方法就是這樣了,都做到的話應該沒有問題了,不會影響你的性能的

⑷ java加密的幾種方式

朋友你好,很高興為你作答。

首先,Java加密能夠應對的風險包括以下幾個:

1、核心技術竊取

2、核心業務破解

3、通信模塊破解

4、API介面暴露

本人正在使用幾維安全Java加密方式,很不錯,向你推薦,希望能夠幫助到你。

幾維安全Java2C針對DEX文件進行加密保護,將DEX文件中標記的Java代碼翻譯為C代碼,編譯成加固後的SO文件。默認情況只加密activity中的onCreate函數,如果開發者想加密其它類和方法,只需對相關類或函數添加標記代碼,在APK加密時會自動對標記的代碼進行加密處理。

與傳統的APP加固方案相比,不涉及到自定義修改DEX文件的載入方式,所以其兼容性非常好;其次Java函數被完全轉化為C函數,直接在Native層執行,不存在Java層解密執行的步驟,其性能和執行效率更優。

如果操作上有不明白的地方,可以聯系技術支持人員幫你完成Java加密。

希望以上解答能夠幫助到你。

⑸ java中如何把18位字元串加密成6位純數字元串

首先,我們可以使禪敗用Java中的MD5加密演算法將18位的字元串賀隱顫進行加密,得到一個32位的加密串。然後,我們可以將這個32位的加密串進行截取,取其中的6個字元作為生成的6位純數字字元。截取字元可選取加密串中前6位或後6位,或者是中間的6位等。然後,我們需要將取到的6個字元轉化成數字字元,即對應的ASCII碼值。最後,將這個數字字元再轉化成6位純數字字元串即可。具體實現可以參考Java中的攜察MD5加密演算法以及字元截取、轉換方法。

⑹ 誰能提供一個java的純數字加密的方法,要從8位變為16位,生成的加密數據要看起來沒有規律

public class DesUtil {

/** 字元串默認鍵值 */
private static String strDefaultKey = "national";

/** 加密工具 */
private Cipher encryptCipher = null;

/** 解密工具 */
private Cipher decryptCipher = null;

/**
* 將byte數組轉換為表示16進制值的字元串, 如:byte[]{8,18}轉換為:0813, 和public static byte[]
* hexStr2ByteArr(String strIn) 互為可逆的轉換過程
*
* @param arrB
* 需要轉換的byte數組
* @return 轉換後的字元串
* @throws Exception
* 本方法不處理任何異常,所有異常全部拋出
*/
public static String byteArr2HexStr(byte[] arrB) throws Exception {
int iLen = arrB.length;
// 每個byte用兩個字元才能表示,所以字元串的長度是數組長度的兩倍
StringBuffer sb = new StringBuffer(iLen * 2);
for (int i = 0; i < iLen; i++) {
int intTmp = arrB[i];
// 把負數轉換為正數
while (intTmp < 0) {
intTmp = intTmp + 256;
}
// 小於0F的數需要在前面補0
if (intTmp < 16) {
sb.append("0");
}
sb.append(Integer.toString(intTmp, 16));
}
return sb.toString();
}

/**
* 將表示16進制值的字元串轉換為byte數組, 和public static String byteArr2HexStr(byte[] arrB)
* 互為可逆的轉換過程
*
* @param strIn
* 需要轉換的字元串
* @return 轉換後的byte數組
* @throws Exception
* 本方法不處理任何異常,所有異常全部拋出
* @author <a href="mailto:[email protected]">LiGuoQing</a>
*/
public static byte[] hexStr2ByteArr(String strIn) throws Exception {
byte[] arrB = strIn.getBytes();
int iLen = arrB.length;

// 兩個字元表示一個位元組,所以位元組數組長度是字元串長度除以2
byte[] arrOut = new byte[iLen / 2];
for (int i = 0; i < iLen; i = i + 2) {
String strTmp = new String(arrB, i, 2);
arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);
}
return arrOut;
}

/**
* 默認構造方法,使用默認密鑰
*
* @throws Exception
*/
public DesUtil() throws Exception {
this(strDefaultKey);
}

/**
* 指定密鑰構造方法
*
* @param strKey
* 指定的密鑰
* @throws Exception
*/
public DesUtil(String strKey) throws Exception {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
Key key = getKey(strKey.getBytes());

encryptCipher = Cipher.getInstance("DES");
encryptCipher.init(Cipher.ENCRYPT_MODE, key);

decryptCipher = Cipher.getInstance("DES");
decryptCipher.init(Cipher.DECRYPT_MODE, key);
}

/**
* 加密位元組數組
*
* @param arrB
* 需加密的位元組數組
* @return 加密後的位元組數組
* @throws Exception
*/
public byte[] encrypt(byte[] arrB) throws Exception {
return encryptCipher.doFinal(arrB);
}

/**
* 加密字元串
*
* @param strIn
* 需加密的字元串
* @return 加密後的字元串
* @throws Exception
*/
public String encrypt(String strIn) throws Exception {
return byteArr2HexStr(encrypt(strIn.getBytes()));
}

/**
* 解密位元組數組
*
* @param arrB
* 需解密的位元組數組
* @return 解密後的位元組數組
* @throws Exception
*/
public byte[] decrypt(byte[] arrB) throws Exception {
return decryptCipher.doFinal(arrB);
}

/**
* 解密字元串
*
* @param strIn
* 需解密的字元串
* @return 解密後的字元串
* @throws Exception
*/
public String decrypt(String strIn) throws Exception {
return new String(decrypt(hexStr2ByteArr(strIn)));
}

/**
* 從指定字元串生成密鑰,密鑰所需的位元組數組長度為8位 不足8位時後面補0,超出8位只取前8位
*
* @param arrBTmp
* 構成該字元串的位元組數組
* @return 生成的密鑰
* @throws java.lang.Exception
*/
private Key getKey(byte[] arrBTmp) throws Exception {
// 創建一個空的8位位元組數組(默認值為0)
byte[] arrB = new byte[8];

// 將原始位元組數組轉換為8位
for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {
arrB[i] = arrBTmp[i];
}

// 生成密鑰
Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");

return key;
}

/**
* main方法 。
*
* @author 劉堯興
* @param args
*/
public static void main(String[] args) {
try {
String test = "asc";
DesUtil des = new DesUtil("abc");// 自定義密鑰
// System.out.println("加密前的字元:" + test);
// System.out.println("加密後的字元:" + des.encrypt(test));
// System.out.println("解密後的字元:" + des.decrypt(des.encrypt(test)));
} catch (Exception e) {
e.printStackTrace();
}
}

}

⑺ java編寫數字加密解密

//package wangcai.test;

public interface Endecryption {
public static final byte[] EN={48,49,50,51,52,53,54,55,56,57};
public static final byte[] DE={55,53,57,49,51,54,56,48,50,52};
}

//package wangcai.test;
import java.util.Scanner;

public class Cryption implements Endecryption{
/*
* 原始數字與加密後得到的密文數字之間的對應關系如下:

原始數字:0 1 2 3 4 5 6 7 8 9
密文數字:7 5 9 1 3 6 8 0 2 4

試編寫程序把原始數字轉換成加密密文或把加密密文轉換成原始數字。
輸入:
1 6 (第一個數表示加密或解密:1加密,2解密;第二個數表示數字的個數)
1 9 9 7 7 1 (待處理的數字內容)
輸出:
5 4 4 0 0 5
*/

public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);

Cryption c=new Cryption();
System.out.println("請輸入是加密還是解密:1加密,2解密");
int ende=sc.nextInt();
if(ende==1)
{
System.out.println("請輸入加密的數字個數");
int num=sc.nextInt();
System.out.println("請輸入"+num+"個數字");
String temp=new Scanner(System.in).nextLine();
System.out.println(c.Encryption(temp));
}
else if(ende==2)
{
System.out.println("請輸入解密的數字個數");
int num=sc.nextInt();
System.out.println("請輸入"+num+"個數字");
String temp=new Scanner(System.in).nextLine();
System.out.println(c.Decryption(temp));
}
else
{
System.out.println("輸入錯誤");
}

}

/**
* 加密
* @param temp
* @return
*/
public String Encryption(String temp)
{
String result="";
byte[] temp_byte=temp.getBytes();
for(byte b:temp_byte)
{
int i=0;
for(;i<EN.length;i++)
{
if(b==EN[i])
{
result+=(char)DE[i];
break;
}
}
if(i==EN.length)
{
result+=(char)b;
}
}
return result;
}

/**
* 解密
* @param temp
* @return
*/
public String Decryption(String temp)
{
String result="";
byte[] temp_byte=temp.getBytes();
for(byte b:temp_byte)
{
int i=0;
for(;i<DE.length;i++)
{
if(b==DE[i])
{
result+=(char)EN[i];
break;
}
}
if(i==DE.length)
{
result+=(char)b;
}
}
return result;
}

}
加密解密方面的一般採用byte來實現

⑻ Java編程如何給數字加密

最簡單的,用異或運算。
你也可以自己寫個加密方法啊。
比如說:利用unicode字元加密啊。假設一個數字a它的unicode值是1234,你自己設計個函數,比如說y=2x^3+3,得到一個新的unicode字元,然後把這個unicode字元轉換為字母,這個字母可能是漢字,但更可能是外國符文,反正一般人不會認出來的。你解密的時候,倒推一下就行了。

⑼ 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加密演算法有:
第一種. BASE
Base是網路上最常見的用於傳輸Bit位元組代碼的編碼方式之一,大家可以查看RFC~RFC,上面有MIME的詳細規范。Base編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base來將一個較長的唯一標識符(一般為-bit的UUID)編碼為一個字元串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base編碼具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。
第二種. MD
MD即Message-Digest Algorithm (信息-摘要演算法),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、哈希演算法),主流編程語言普遍已有MD實現。將數據(如漢字)運算為另一固定長度值,是雜湊演算法的基礎原理,MD的前身有MD、MD和MD。廣泛用於加密和解密技術,常用於文件校驗。校驗?不管文件多大,經過MD後都能生成唯一的MD值。好比現在的ISO校驗,都是MD校驗。怎麼用?當然是把ISO經過MD後產生MD的值。一般下載linux-ISO的朋友都見過下載鏈接旁邊放著MD的串。就是用來驗證文件是否一致的。
MD演算法具有以下特點:
壓縮性:任意長度的數據,算出的MD值長度都是固定的。
容易計算:從原數據計算出MD值很容易。
抗修改性:對原數據進行任何改動,哪怕只修改個位元組,所得到的MD值都有很大區別。
弱抗碰撞:已知原數據和其MD值,想找到一個具有相同MD值的數據(即偽造數據)是非常困難的。
強抗碰撞:想找到兩個不同的數據,使它們具有相同的MD值,是非常困難的。
MD的作用是讓大容量信息在用數字簽名軟體簽署私人密鑰前被」壓縮」成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的十六進制數字串)。除了MD以外,其中比較有名的還有sha-、RIPEMD以及Haval等。
第三種.SHA
安全哈希演算法(Secure Hash Algorithm)主要適用於數字簽名標准(Digital Signature Standard DSS)裡面定義的數字簽名演算法(Digital Signature Algorithm DSA)。對於長度小於^位的消息,SHA會產生一個位的消息摘要。該演算法經過加密專家多年來的發展和改進已日益完善,並被廣泛使用。該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。散列函數值可以說是對明文的一種「指紋」或是「摘要」所以對散列值的數字簽名就可以視為對此明文的數字簽名。
SHA-與MD的比較
因為二者均由MD導出,SHA-和MD彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:
對強行攻擊的安全性:最顯著和最重要的區別是SHA-摘要比MD摘要長 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對MD是^數量級的操作,而對SHA-則是^數量級的操作。這樣,SHA-對強行攻擊有更大的強度。
對密碼分析的安全性:由於MD的設計,易受密碼分析的攻擊,SHA-顯得不易受這樣的攻擊。
速度:在相同的硬體上,SHA-的運行速度比MD慢。
第四種.HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼,基於密鑰的Hash演算法的認證協議。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑒別認證等。

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:944
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:742
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372