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,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑒別認證 等。
2. javajdbc連接mysql資料庫如何實現用戶名密碼以及傳輸數據的加密
如果jdbc和mysql都支持SSL那通過配置就可以了x0dx0a如果不支持,那也可以自己來實現。x0dx0a實現思路:x0dx0a1、在資料庫的主機上運行一個java服務,用來轉發數據這個服務我們成為A服務x0dx0a2、客戶端並不直接訪問資料庫,而訪問A服務,客戶端和A服務之間的傳輸代碼由用戶自己完成,當然可以加密。走套接字,走http,或者其他什麼都是可以的。
3. java加密的幾種方式
朋友你好,很高興為你作答。
首先,Java加密能夠應對的風險包括以下幾個:
1、核心技術竊取
2、核心業務破解
3、通信模塊破解
4、API介面暴露
本人正在使用幾維安全Java加密方式,很不錯,向你推薦,希望能夠幫助到你。
幾維安全Java2C針對DEX文件進行加密保護,將DEX文件中標記的Java代碼翻譯為C代碼,編譯成加固後的SO文件。默認情況只加密activity中的onCreate函數,如果開發者想加密其它類和方法,只需對相關類或函數添加標記代碼,在APK加密時會自動對標記的代碼進行加密處理。
與傳統的APP加固方案相比,不涉及到自定義修改DEX文件的載入方式,所以其兼容性非常好;其次Java函數被完全轉化為C函數,直接在Native層執行,不存在Java層解密執行的步驟,其性能和執行效率更優。
如果操作上有不明白的地方,可以聯系技術支持人員幫你完成Java加密。
希望以上解答能夠幫助到你。
4. javaweb的數據傳輸加密,怎麼整比較好
現在流行的是用RSA進行加密,然後傳輸。
也有很多人直接用md5進行簽名,也說不清楚,感覺像是加密了。
至於傳輸,給傳輸通道加密,好像有點大動干戈的意思。還是不要考慮了
5. JAVA從控制台中輸入一段明文然後加密為ASC
publicclassDay25B{
staticScannersc=newScanner(System.in);
publicstaticvoidmain(String[]args){
Stringstr;
while(true){
System.out.print("輸入:");
str=sc.nextLine();
if(str.contains("over")){
break;
}
show(str);
}
}
//明文
publicstaticvoidshow(Stringstr){
System.out.println("明文:"+str);
StringstrEn=enCode(str);
System.out.println("加密:"+strEn);
StringstrDe=deCode(strEn);
System.out.println("解密:"+strDe+" ");
}
//加密!
publicstaticStringenCode(Stringstr){
Stringsrc="";
for(inti=0;i<str.length();i++){
inttem=str.charAt(i);
intnum=i;
System.out.print((char)tem+"編碼:"+tem+" 索引:"+i+" ");
if(num==0){
num=1;
}
tem*=num;
src+=tem+",";
}
returnsrc;
}
//解密!
publicstaticStringdeCode(Stringstr){
String[]strs=str.split(",");
StringstrTem="";
for(inti=0;i<strs.length;i++){
inttem=Integer.valueOf(strs[i]);
intnum=i;
if(num==0){
num=1;
}
tem/=num;
strTem+=(char)tem;
}
returnstrTem;
}
}
//你好,說明一下,題目中說要求把大寫進行小寫轉換,這,我個人覺得有點多此一舉!
//可以辦到,定義一個數組,記錄當前索引,然後打個標記就可以了(當然也有其他方法打標記)
//解密的時候,如果符合標記的就進行運算解密,然後在把char大寫轉換即可還原!
//當前這個類,忽視這中做法,直接按照給定的規則進行:加密,解密,大小寫直接還原.簡單!
6. 北大青鳥java培訓:互聯網信息安全傳輸加密模式原理分解
網路安全主要是通過信息加密來實現的。
今天,我們就一起來了解一下,這些信息加密的方法是如何運行的。
它背後的原理都有哪些。
希望通過對本文的閱讀。
能夠提高大家對互聯網信息安全的信任度。
有了「原信息」和它對應的「md5簽名字元串」,我們就可以做基本的信息驗證:通過md5簽名字元串的一致性,來保障我們收到的信息沒有受到更改。
P.S.:由於簽名signature在後續文章中會另有所指,為區分md5簽名字元串,我們將md5簽名字元串的叫法,更改為md5指紋字元串。
意思同簽名是一樣的,就是A之所以是A的證據、特徵,可以用簽名來表示,也可以用指紋來表示。
這里,我們開始將md5字元串對應的這個特徵,稱作md5指紋。
但一個容易發現的漏洞是,如果「原信息」和「md5指紋字元串」同時被修改了該怎麼辦?原信息被代提成了偽信息,而md5指紋字元串也被替換成了偽信息所生成的md5碼,這時候,原有的驗證過程都可以走通,根本無法發現信息被修改了或者替換了。
為了解決這個問題,在工業實踐中便會將驗證和加密進行組合使用。
除了單純的組合,還會引入一些基本的小技巧。
例如,因為md5的驗證演算法是公開的,所以很容易生成一份信息的md5指紋字元串,從而對原信息進行偽造。
那麼,可以不可以讓人無法或者說難於偽造這份信息的md5指紋字元串呢?一個小技巧是:並不提供原信息的md5驗證碼,而是提供「原信息+akey」的md5指紋字元串:這個key,就是一串如「」這樣的隨機字元串,它由「發信人」和「收信人」分別單獨保存。
這時候,我們的驗證流程就變成了:發件人將「原信息」和「key」一起打包,生成一個md5指紋字元串。
再將原信息和md5指紋字元串發送出去。
收件人收到信息後,將「接受信息」和「key」一起打包,生成一個md5字元串,再與接收到的md5字元串比較,看它們是否一致。
在這樣的情況下,即便是原信息和md5字元串同時被修改了,但因為偽造者並不知道這個md5字元串是在原有信息的基礎上,增加了什麼樣的一個key字元串來生成的,他就幾乎不可能提供一個「原信息+key」的md5字元串。
因為他無法逆向推導出那個key長成什麼樣。
而這個「幾乎不可能」,是由md5加密演算法所保證的。
另一種保障「原信息」和「md5指紋字元串」的方式,是直接考慮把md5驗證碼做加密。
寧夏電腦培訓http://www.kmbdqn.cn/認為這種方式並不同上面的小技巧相沖突,事實上它完全可以和上面的技巧結合,構造出更安全的方式。
但為了降低理解的困難程度,讓我們先暫時拋開上面的小技巧,只是單純地考慮「原信息」「md5指紋字元串」和「md5字元串加密」這三樣東西。
7. android,java 通用的加密解密方式有幾種
移動端越來越火了,我們在開發過程中,總會碰到要和移動端打交道的場景,比如.NET和android或者iOS的打交道。為了讓數據交互更安全,我們需要對數據進行加密傳輸。今天研究了一下,把幾種語言的加密都實踐了一遍,實現了.NET,java(android),iOS都同一套的加密演算法,下面就分享給大家。
AES加密有多種演算法模式,下面提供兩套模式的可用源碼。
加密方式:
先將文本AES加密
返回Base64轉碼
解密方式:
將數據進行Base64解碼
進行AES解密
一、CBC(Cipher Block Chaining,加密塊鏈)模式
是一種循環模式,前一個分組的密文和當前分組的明文異或操作後再加密,這樣做的目的是增強破解難度.
密鑰
密鑰偏移量
java/adroid加密AESOperator類:
package com.bci.wx.base.util;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* AES 是一種可逆加密演算法,對用戶的敏感信息加密處理 對原始數據進行AES加密後,在進行Base64編碼轉化;
*/
public class AESOperator {
/*
* 加密用的Key 可以用26個字母和數字組成 此處使用AES-128-CBC加密模式,key需要為16位。
*/
private String sKey = "smkldospdosldaaa";//key,可自行修改
private String ivParameter = "0392039203920300";//偏移量,可自行修改
private static AESOperator instance = null;
private AESOperator() {
}
public static AESOperator getInstance() {
if (instance == null)
instance = new AESOperator();
return instance;
}
public static String Encrypt(String encData ,String secretKey,String vector) throws Exception {
if(secretKey == null) {
return null;
}
if(secretKey.length() != 16) {
return null;
}
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] raw = secretKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
IvParameterSpec iv = new IvParameterSpec(vector.getBytes());// 使用CBC模式,需要一個向量iv,可增加加密演算法的強度
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(encData.getBytes("utf-8"));
return new BASE64Encoder().encode(encrypted);// 此處使用BASE64做轉碼。
}
// 加密
public String encrypt(String sSrc) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] raw = sKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());// 使用CBC模式,需要一個向量iv,可增加加密演算法的強度
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
return new BASE64Encoder().encode(encrypted);// 此處使用BASE64做轉碼。
}
// 解密
public String decrypt(String sSrc) throws Exception {
try {
byte[] raw = sKey.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// 先用base64解密
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original, "utf-8");
return originalString;
} catch (Exception ex) {
return null;
}
}
public String decrypt(String sSrc,String key,String ivs) throws Exception {
try {
byte[] raw = key.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(ivs.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// 先用base64解密
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original, "utf-8");
return originalString;
} catch (Exception ex) {
return null;
}
}
public static String encodeBytes(byte[] bytes) {
StringBuffer strBuf = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
strBuf.append((char) (((bytes[i] >> 4) & 0xF) + ((int) 'a')));
strBuf.append((char) (((bytes[i]) & 0xF) + ((int) 'a')));
}
return strBuf.toString();
}
8. java進行3des加密傳過來的數據,php怎麼解密
<?php
/**
* 3DES加解密類
* @Author: 黎志斌
* @version: v1.0
* 2016年7月21日
*/
class Encrypt
{
//加密秘鑰,
private $_key;
private $_iv;
public function __construct($key, $iv)
{
$this->_key = $key;
$this->_iv = $iv;
}
/**
* 對字元串進行3DES加密
* @param string 要加密的字元串
* @return mixed 加密成功返回加密後的字元串,否則返回false
*/
public function encrypt3DES($str)
{
$td = mcrypt_mole_open(MCRYPT_3DES, "", MCRYPT_MODE_CBC, "");
if ($td === false) {
return false;
}
//檢查加密key,iv的長度是否符合演算法要求
$key = $this->fixLen($this->_key, mcrypt_enc_get_key_size($td));
$iv = $this->fixLen($this->_iv, mcrypt_enc_get_iv_size($td));
//加密數據長度處理
$str = $this->strPad($str, mcrypt_enc_get_block_size($td));
if (mcrypt_generic_init($td, $key, $iv) !== 0) {
return false;
}
$result = mcrypt_generic($td, $str);
mcrypt_generic_deinit($td);
mcrypt_mole_close($td);
return $result;
}
/**
* 對加密的字元串進行3DES解密
* @param string 要解密的字元串
* @return mixed 加密成功返回加密後的字元串,否則返回false
*/
public function decrypt3DES($str)
{
$td = mcrypt_mole_open(MCRYPT_3DES, "", MCRYPT_MODE_CBC, "");
if ($td === false) {
return false;
}
//檢查加密key,iv的長度是否符合演算法要求
$key = $this->fixLen($this->_key, mcrypt_enc_get_key_size($td));
$iv = $this->fixLen($this->_iv, mcrypt_enc_get_iv_size($td));
if (mcrypt_generic_init($td, $key, $iv) !== 0) {
return false;
}
$result = mdecrypt_generic($td, $str);
mcrypt_generic_deinit($td);
mcrypt_mole_close($td);
return $this->strUnPad($result);
}
/**
* 返回適合演算法長度的key,iv字元串
* @param string $str key或iv的值
* @param int $td_len 符合條件的key或iv長度
* @return string 返回處理後的key或iv值
*/
private function fixLen($str, $td_len)
{
$str_len = strlen($str);
if ($str_len > $td_len) {
return substr($str, 0, $td_len);
} else if($str_len < $td_len) {
return str_pad($str, $td_len, '0');
}
return $str;
}
/**
* 返回適合演算法的分組大小的字元串長度,末尾使用\0補齊
* @param string $str 要加密的字元串
* @param int $td_group_len 符合演算法的分組長度
* @return string 返回處理後字元串
*/
private function strPad($str, $td_group_len)
{
$padding_len = $td_group_len - (strlen($str) % $td_group_len);
return str_pad($str, strlen($str) + $padding_len, "\0");
}
/**
* 返回適合演算法的分組大小的字元串長度,末尾使用\0補齊
* @param string $str 要加密的字元串
* @return string 返回處理後字元串
*/
private function strUnPad($str)
{
return rtrim($str);
}
}
$key = 'ABCEDFGHIJKLMNOPQ';
$iv = '0123456789';
$des = new Encrypt($key, $iv);
$str = "abcdefghijklmnopq";
echo "source: {$str},len: ",strlen($str),"\r\n";
$e_str = $des->encrypt3DES($str);
echo "entrypt: ", $e_str, "\r\n";
$d_str = $des->decrypt3DES($e_str);
echo "dntrypt: {$d_str},len: ",strlen($d_str),"\r\n";
9. JAVA客戶端與C#伺服器端之間的數據傳輸加密用什麼加密方式 要求每次加密結果密文都不同。
常用的加密演算法有DES、AES、MD5等不管採用哪種加密方法,加密後的內容都會大大增加,這樣就給網路傳輸帶來影響如果不增加加密後的內容,可以採用位運算的加密方法
10. 怎麼用java現實文件加密之後上傳
的問題是先加密,然後傳輸
不是在傳輸中加密
解決一:
改變好的演算法,保護好你的種子數,別人得到了演算法也不知你的內容
解決二:
利用混搖器混搖代碼,但未必從根本上解決問題