當前位置:首頁 » 編程語言 » javabase64加密

javabase64加密

發布時間: 2023-05-30 09:33:57

javaee6怎麼進行base64加密

package com.raqsoft.common;

public class Base64
{
private static final char intToBase64[] = {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', '+', '/'
};

private static final char intToAltBase64[] = {
'!', '"', '#', '$', '%', '&', '\'', '(', ')', ',',
'-', '.', ':', ';', '<', '>', '@', '[', ']', '^',
'`', '_', '{', '|', '}', '~', 'a', 'b', 'c', 'd',
'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', '+', '?'
};

private static final byte base64ToInt[] = {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 62, -1, -1, -1, 63, 52, 53,
54, 55, 56, 57, 58, 59, 60, 61, -1, -1,
-1, -1, -1, -1, -1, 0, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, -1, -1, -1, -1, -1, -1, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 51
};

private static final byte altBase64ToInt[] = {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 0, 1, 2, 3, 4, 5, 6,
7, 8, -1, 62, 9, 10, 11, -1, 52, 53,
54, 55, 56, 57, 58, 59, 60, 61, 12, 13,
14, -1, 15, 63, 16, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 17, -1, 18, 19, 21, 20, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 51, 22, 23, 24, 25
};

public static String byteArrayToBase64(byte bb[]) {
return byteArrayToBase64(bb, false);
}

public static String byteArrayToAltBase64(byte bb[]) {
return byteArrayToBase64(bb, true);
}

private static String byteArrayToBase64(byte bb[], boolean flag) {
int i = bb.length;
int j = i / 3;
int k = i - 3 * j;
int l = 4 * ((i + 2) / 3);
StringBuffer stringbuffer = new StringBuffer(l);
char ac[] = flag ? intToAltBase64 : intToBase64;
int i1 = 0;
for(int j1 = 0; j1 < j; j1++) {
int k1 = bb[i1++] & 0xff;
int i2 = bb[i1++] & 0xff;
int k2 = bb[i1++] & 0xff;
stringbuffer.append(ac[k1 >> 2]);
stringbuffer.append(ac[k1 << 4 & 0x3f | i2 >> 4]);
stringbuffer.append(ac[i2 << 2 & 0x3f | k2 >> 6]);
stringbuffer.append(ac[k2 & 0x3f]);
}

if(k != 0) {
int l1 = bb[i1++] & 0xff;
stringbuffer.append(ac[l1 >> 2]);
if(k == 1) {
stringbuffer.append(ac[l1 << 4 & 0x3f]);
stringbuffer.append("==");
} else {
int j2 = bb[i1++] & 0xff;
stringbuffer.append(ac[l1 << 4 & 0x3f | j2 >> 4]);
stringbuffer.append(ac[j2 << 2 & 0x3f]);
stringbuffer.append('=');
}
}
return stringbuffer.toString();
}

public static byte[] base64ToByteArray(String s) {
return base64ToByteArray(s, false);
}

public static byte[] altBase64ToByteArray(String s) {
return base64ToByteArray(s, true);
}

private static byte[] base64ToByteArray(String s, boolean flag) {
byte bb[] = flag ? altBase64ToInt : base64ToInt;
int i = s.length();
int j = i / 4;
if(4 * j != i)
throw new IllegalArgumentException("String length must be a multiple of four.");
int k = 0;
int l = j;
if(i != 0) {
if(s.charAt(i - 1) == '=') {
k++;
l--;
}
if(s.charAt(i - 2) == '=')
k++;
}
byte bc[] = new byte[3 * j - k];
int i1 = 0;
int j1 = 0;
for(int k1 = 0; k1 < l; k1++) {
int l1 = base64toInt(s.charAt(i1++), bb);
int j2 = base64toInt(s.charAt(i1++), bb);
int l2 = base64toInt(s.charAt(i1++), bb);
int j3 = base64toInt(s.charAt(i1++), bb);
bc[j1++] = (byte)(l1 << 2 | j2 >> 4);
bc[j1++] = (byte)(j2 << 4 | l2 >> 2);
bc[j1++] = (byte)(l2 << 6 | j3);
}

if(k != 0) {
int i2 = base64toInt(s.charAt(i1++), bb);
int k2 = base64toInt(s.charAt(i1++), bb);
bc[j1++] = (byte)(i2 << 2 | k2 >> 4);
if(k == 1) {
int i3 = base64toInt(s.charAt(i1++), bb);
bc[j1++] = (byte)(k2 << 4 | i3 >> 2);
}
}
return bc;
}

private static int base64toInt(char c, byte bb[]) {
byte b = bb[c];
if(b < 0)
throw new IllegalArgumentException("Illegal character " + c);
else
return b;
}

public static void main(String[] args) {
String s = "0123456789";
byte[] b = s.getBytes();
s = Base64.byteArrayToBase64(b);
System.out.println(s);
b = Base64.base64ToByteArray(s);
System.out.println(new String(b));
}
}

⑵ java base64

java base64是什麼,讓我們一起了解一下?

Base64是一種編碼方法,要求把每三個8Bit的位元組轉換為四個6Bit的位元組,轉換之後的這四個位元組中每6個晌慧穗有效bit為有效數據,空餘的那兩個bit用0補上成為一個位元組。

為什麼要使用Base64?

Base 64主要用途不是加密,而是把一些二進制數轉成普通字元,方便在網路上傳輸。 由於一些二進制字元在傳輸協議中屬於控制字元,不能直接傳送,所以需要轉換一下才可以。由於某些系統中只能使用ASCII字元,Base64就是用來將非ASCII字元的數據轉換成ASCII字元的一種方法,Base64特別適合在http,mime協議下快速傳輸數據。

比如網路中圖片的傳輸Base64,並非安全領域下的加密解密演算法。雖然經常遇到所謂的base64的加密解密。但base64隻能算是一個編碼演算法,對數據內容進行編碼來適合傳輸。雖然base64編碼過後原文也變成不能看到的字元格式,但是方式初級又簡單。

那在Java中想要實現Base64的加解密,有哪些方式?

主要有以下四種(推薦度由低到高):

1、JDK中的宴卜sun.misc套碧桐件。

2、第三方擴展包 bouncy castle。

3、第三方擴展包 commons codec。

4、JDK8及更高版本中的 java.util.Base64。

實戰操作,JDK實現代碼如下: import sun.misc.BASE64Decoder;   import sun.misc.BASE64Encoder;   /** * BASE64加密解密 */   public class BASE64 {       /** * BASE64解密 * @param key * @return * @throws Exception */       public static byte[] decryptBASE64(String key) throws Exception {           return (new BASE64Decoder()).decodeBuffer(key);       }       /** * BASE64加密 * @param key * @return * @throws Exception */       public static String encryptBASE64(byte[] key) throws Exception {           return (new BASE64Encoder()).encodeBuffer(key);       }       public static void main(String[] args) throws Exception {           String data = BASE64.encryptBASE64("http://aub.iteye.com/".getBytes());           System.out.println("加密前:" + data);           byte[] byteArray = BASE64.decryptBASE64(data);           System.out.println("解密後:" + new String(byteArray));       }   }

⑶ C++與JAVA通過DES及BASE64 互相加密解密

我運戚猜你大概想要旁檔陵將加密的東西應用在android手機上,同時困擾你的還有轉碼的問題,當時這個也困擾了我很久,特別是後面的補位方式,最後多看書,看幾個開源的演算法就搞定了。網上有幾個可以解決的例子都是錯的,蠢譽我自己寫了一個,和你說的一樣
PKU-一夫

⑷ java 怎麼實現php的base64加密,兩種語言的base64加密後的數據不一致

在開發的時候遇到個現象。對方用PHP base64_encode() 對字元串進行加米。但我這邊是用Java解馬。導致出現問題。問題如下:
[java] view plain
package com.tudou.test;
import java.io.IOException;
/**
* <p>java base64編碼和解碼的演示類
* 註:base64編碼後通過url傳遞時,獲得時"="會給替換掉,* 處理方式:在編碼前將"=","/","+" 替換成別的字元,在解碼之前替換回來* </p>
* @author tw 2010-03-01
*
*/
public class TestBase64Net {
/**
* 編馬
* @param filecontent
* @return String
*/
public static String encode(byte[] bstr){return new sun.misc.BASE64Encoder().encode(bstr);}
/**
* 解碼
* @param filecontent
* @return string
*/
public static byte[] decode(String str){
byte[] bt = null;
try {
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();bt = decoder.decodeBuffer( str );
} catch (IOException e) {
e.printStackTrace();
}
return bt;
}
/**
* @param args
*/
public static void main(String[] args) {
TestBase64Net te = new TestBase64Net();
//PHP 用base64 將union_id=102155_100001_01_01 加米後的字元串為: //java 用sun.misc.BASE64Encoder().encode()進行解馬,結果為:union_id=102155_100001_01_01亂碼0System.out.println(new String(te.decode("")));//java 用sun.misc.BASE64Decoder 將union_id=102155_100001_01_01進行加米,結果為:==System.out.println(new String(te.encode("union_id=102155_100001_01_01".getBytes())));}
}
經過對比不難發現用php的base64_encode() 方法進行加米,JAVA 不能用sun.misc.BASE64Encoder().encode() 進行解米。那該怎麼辦?!
可以用apache的commons包 commons-codec-1.7.jar 中的org.apache.commons.codec.binary.Base64 進行解米。
[java] view plain
import org.apache.commons.codec.binary.Base64;public class TestBase64 {
public static void main(String[] args) {
System.out.println(new String(Base64.decodeBase64("".getBytes())));}
}
?

⑸ 在Java中如何進行BASE64編碼和解碼

importsun.misc.BASE64Encoder;
importsun.misc.BASE64Decoder;

//將s進行BASE64編碼
publicstaticStringgetBASE64(Strings){
if(s==null)returnnull;
return(newsun.misc.BASE64Encoder()).encode(s.getBytes());
}

//將BASE64編碼的字元串s進行解碼
(Strings){
if(s==null)returnnull;
BASE64Decoderdecoder=newBASE64Decoder();
try{
byte[]b=decoder.decodeBuffer(s);
returnnewString(b);
}catch(Exceptione){
returnnull;
}
}

⑹ java base64加密安全嗎

base64不是加密,是編碼方法,當然可以解碼了。
不安全

⑺ Java中顯示文字與加密的問題

函數getText()是一個加密函數,消液友
他將"==" 加密成一個字元串進行傳送,然後在顯示的時候,在將加密的字元串進行解密即可。

getText()可採用不同的加密方式進埋輪行加密,你自己也可以自己設計一個,然後再做一個解密函數即可。

如果要看他的,請找到getText()拿槐的源碼即可。

⑻ 求java加密源代碼(MD5,base64)

import java.security.*;
import javax.crypto.*;

/**
* 本例解釋如何利用DES私鑰加密演算法加解密
*
* @author Devon
* @version 1.0 04/03/10
*/
public class SingleKeyExample {

public static void main(String[] args) {
try {
String algorithm = "DES"; //定義加密演算法,可用 DES,DESede,Blowfish
String message = "Hello World. 這是待加密的信息";

// 生成個DES密鑰
KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm);
keyGenerator.init(56); //選擇DES演算法,密鑰長度必須為56位
Key key = keyGenerator.generateKey(); //生成密鑰

// 生成Cipher對象
Cipher cipher = Cipher.getInstance("DES");

//用密鑰加密明文(message),生成密文(cipherText)
cipher.init(Cipher.ENCRYPT_MODE, key); //操作模式為加密(Cipher.ENCRYPT_MODE),key為密鑰
byte[] cipherText = cipher.doFinal(message.getBytes()); //得到加密後的位元組數組
System.out.println("加密後的信息: " + new String(cipherText));

//用密鑰加密明文(plainText),生成密文(cipherByte)
cipher.init(Cipher.DECRYPT_MODE, key); //操作模式為解密,key為密鑰
byte[] sourceText = cipher.doFinal(cipherText); //獲得解密後位元組數組
System.out.println("解密後的信息: " + new String(sourceText));
} catch (Exception ex) {
ex.printStackTrace();
}
}

}

/**
* @author Devon
*/

import java.security.*;
import java.security.spec.*;
import javax.crypto.*;

public class PairKeyExample {

public static void main(String argv[]) {
try {
String algorithm = "RSA"; //定義加密演算法,可用 DES,DESede,Blowfish
String message = "張三,你好,我是李四";

//產生張三的密鑰對(keyPairZhang)
KeyPairGenerator keyGeneratorZhang =
KeyPairGenerator.getInstance(algorithm); //指定採用的演算法
keyGeneratorZhang.initialize(1024); //指定密鑰長度為1024位
KeyPair keyPairZhang = keyGeneratorZhang.generateKeyPair(); //產生密鑰對
System.out.println("生成張三的公鑰對");

// 張三生成公鑰(publicKeyZhang)並發送給李四,這里發送的是公鑰的數組位元組
byte[] publicKeyZhangEncode = keyPairZhang.getPublic().getEncoded();

//通過網路或磁碟等方式,把公鑰編碼傳送給李四
//李四接收到張三編碼後的公鑰,將其解碼
KeyFactory keyFacoryLi = KeyFactory.getInstance(algorithm); //得到KeyFactory對象
X509EncodedKeySpec x509KeySpec =
new X509EncodedKeySpec(publicKeyZhangEncode); //公鑰採用X.509編碼
PublicKey publicKeyZhang = keyFacoryLi.generatePublic(x509KeySpec); //將公鑰的KeySpec對象轉換為公鑰
System.out.println("李四成功解碼,得到張三的公鑰");

//李四用張三的公鑰加密信息,並發送給李四
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); //得到Cipher對象
cipher.init(Cipher.ENCRYPT_MODE, publicKeyZhang); //用張三的公鑰初始化Cipher對象
byte[] cipherMessage = cipher.doFinal(message.getBytes()); //得到加密信息
System.out.println("加密後信息:" + new String(cipherMessage));
System.out.println("加密完成,發送給李四...");

//張三用自己的私鑰解密從李四處收到的信息
cipher.init(Cipher.DECRYPT_MODE, keyPairZhang.getPrivate()); //張三用其私鑰初始化Cipher對象
byte[] originalMessage = cipher.doFinal(cipherMessage); //得到解密後信息
System.out.println("張三收到信息,解密後為:" + new String(originalMessage));
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

⑼ java項目如何加密

Java基本的單向加密演算法:

1.BASE64 嚴格地說,屬於編碼格式,而非加密演算法
2.MD5(Message Digest algorithm 5,信息摘要演算法)
3.SHA(Secure Hash Algorithm,安全散列演算法)
4.HMAC(Hash Message Authentication Code,散列消息鑒別碼)
按 照RFC2045的定義,Base64被定義為:Base64內容傳送編碼被設計用來把任意序列的8位位元組描述為一種不易被人直接識別的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
常見於郵件、http加密,截取http信息,你就會發現登錄操作的用戶名、密碼欄位通過BASE64加密的。
主要就是BASE64Encoder、BASE64Decoder兩個類,我們只需要知道使用對應的方法即可。另,BASE加密後產生的位元組位數是8的倍數,如果不夠位數以=符號填充。
MD5
MD5 -- message-digest algorithm 5 (信息-摘要演算法)縮寫,廣泛用於加密和解密技術,常用於文件校驗。校驗?不管文件多大,經過MD5後都能生成唯一的MD5值。好比現在的ISO校驗,都 是MD5校驗。怎麼用?當然是把ISO經過MD5後產生MD5的值。一般下載linux-ISO的朋友都見過下載鏈接旁邊放著MD5的串。就是用來驗證文 件是否一致的。

HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼,基於密鑰的Hash演算法的認證協議。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個 標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑒別認證 等。

⑽ java windows linux BASE64Encoder 加密 漢字

原因很簡單:你在window下默認編碼為GBK或者GB2312,而在linux下默認可能是UTF-8,所以 你要加密的 字元串 處在不同編碼情況下 加密之後必然不同。你應該忘了考慮同一個字元串 處在不同編碼環境下,內部編碼位數是不同的,加密也就當然不同了

熱點內容
手機修改wifi密碼網站是什麼 發布:2024-04-20 15:22:05 瀏覽:322
js源碼下載 發布:2024-04-20 15:05:16 瀏覽:19
編譯翻譯的區別 發布:2024-04-20 14:55:53 瀏覽:893
登錄之後qq密碼要在哪裡看 發布:2024-04-20 14:55:03 瀏覽:730
天龍多開腳本 發布:2024-04-20 14:53:05 瀏覽:770
同一段代碼編譯的長度不同 發布:2024-04-20 14:24:14 瀏覽:379
緩存美劇權力的游戲 發布:2024-04-20 14:16:52 瀏覽:987
如何刪除word文件保存密碼 發布:2024-04-20 14:15:18 瀏覽:824
紅米安卓10如何降級到安卓9 發布:2024-04-20 14:13:25 瀏覽:30
ftp目錄遍歷 發布:2024-04-20 13:58:37 瀏覽:970