Java 加密

Base64

Android有提供冕茅,Java沒有提供

加密

Base64.encode(text.getBytes(), Base64.DEFAULT)提茁;

解密

Base64.decode(text.getBytes(),Base64.DEFAULT);

消息摘要算法

MD

MD5
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] encodeSrc = messageDigest.digest(src.getBytes());

應用:保護密碼,保存密碼摘要在數(shù)據(jù)庫陋气,然后服務器也使用摘要驗證密碼的正確性或者信息比較敏感的地方

SHA

SHA-1,SHA-2(SHA-224,SHA-256,SHA-384,SHA-512)

MessageDigest messageDigest = MessageDigest.getInstance("SHA");
byte[] shaCode = messageDigest.digest(src.getBytes());

應用:驗證數(shù)據(jù)是否完整

MAC
HMAC
KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
SecretKey secretKey = keyGenerator.generateKey();
//the key is created by java
byte[] defaultKey = secretKey.getEncoded();
Log.e("Security","default = " + printByteArray(defaultKey));
//the key is created by you
byte[] key = ByteToHexString.decodeHex(new char[]{'c','a','3','9'});
Log.e("Security","define the key = " + printByteArray(key));
SecretKey restore = new SecretKeySpec(key,"HmacMD5");
Mac mac = Mac.getInstance(restore.getAlgorithm());
mac.init(restore);
byte[] hmacMd5Byte = mac.doFinal(src.getBytes());
return ByteToHexString.encodeHexString(hmacMd5Byte);

對稱加密

DES

安全不夠篙耗,已經(jīng)很少使用了

// produce key
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
SecretKey secretKey = keyGenerator.generateKey();
byte[] bytesKey = secretKey.getEncoded();

// change key
DESKeySpec dks = new DESKeySpec(bytesKey);
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
Key key = skf.generateSecret(dks);

//encode
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE,key);
byte[] desByte = cipher.doFinal(src.getBytes());

//decode
Cipher decodeCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
decodeCipher.init(Cipher.DECRYPT_MODE,key);
byte[] decodeSrc = decodeCipher.doFinal(desByte);
return new String(decodeSrc);
3DES

用法和DES一樣迫筑,只是更改算法名稱和長度

AES

DES替代者

    try {
            // produce key
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
            //會根據(jù)相應的算法使用相應的長度
            keyGenerator.init(new SecureRandom());
            SecretKey secretKey = keyGenerator.generateKey();
            byte[] bytesKey = secretKey.getEncoded();

            // change key
            Key key = new SecretKeySpec(bytesKey,"AES");

            //encode
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE,key);
            byte[] desByte = cipher.doFinal(src.getBytes());

            //decode
            Cipher decodeCipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            decodeCipher.init(Cipher.DECRYPT_MODE,key);
            byte[] decodeSrc = decodeCipher.doFinal(desByte);
            return new String(decodeSrc);
        } catch (Exception e) {
            e.printStackTrace();
        }
PBE

PBE算法結(jié)合了摘要算法和DES算法的優(yōu)點

    try {
            //初始化鹽
            SecureRandom random = new SecureRandom();
            byte[] salt = random.generateSeed(8);

            //口令與密鑰
            String password = "love zgx";
            PBEKeySpec pks = new PBEKeySpec(password.toCharArray());
            SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWITHMD5andDES");
            Key key = factory.generateSecret(pks);

            //加密
            PBEParameterSpec pbeParameterSpec = new PBEParameterSpec(salt,100);
            Cipher cipher = Cipher.getInstance("PBEWITHMD5andDES");
            cipher.init(Cipher.ENCRYPT_MODE,key,pbeParameterSpec);
            byte[] pbeTarget = cipher.doFinal(src.getBytes());

            //解密
            cipher.init(Cipher.DECRYPT_MODE,key,pbeParameterSpec);
            byte[] pbeSrc = cipher.doFinal(pbeTarget);
            return new String(pbeSrc);
        }catch(Exception e){

        }

非對稱加密

分公匙和私匙

DH密匙算法
RSA-基于因子分解
ELGamal-基于離散對數(shù)

數(shù)字簽名算法

帶有密鑰(公鑰宪赶,私鑰)的消息摘要算法,驗證數(shù)據(jù)完整性,認證數(shù)據(jù)來源脯燃,抗否認,私鑰簽名搂妻,公鑰驗證

RSA
DSA
ECDSA
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辕棚,隨后出現(xiàn)的幾起案子欲主,更是在濱河造成了極大的恐慌,老刑警劉巖逝嚎,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扁瓢,死亡現(xiàn)場離奇詭異,居然都是意外死亡补君,警方通過查閱死者的電腦和手機引几,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挽铁,“玉大人伟桅,你說我怎么就攤上這事∮齑ⅲ” “怎么了贿讹?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長够掠。 經(jīng)常有香客問我民褂,道長,這世上最難降的妖魔是什么疯潭? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任赊堪,我火速辦了婚禮,結(jié)果婚禮上竖哩,老公的妹妹穿的比我還像新娘哭廉。我一直安慰自己,他們只是感情好相叁,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布遵绰。 她就那樣靜靜地躺著,像睡著了一般增淹。 火紅的嫁衣襯著肌膚如雪椿访。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天虑润,我揣著相機與錄音成玫,去河邊找鬼。 笑死,一個胖子當著我的面吹牛哭当,可吹牛的內(nèi)容都是我干的猪腕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钦勘,長吁一口氣:“原來是場噩夢啊……” “哼陋葡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起彻采,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤脖岛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后颊亮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡陨溅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年终惑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片门扇。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡雹有,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出臼寄,到底是詐尸還是另有隱情霸奕,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布吉拳,位于F島的核電站质帅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏留攒。R本人自食惡果不足惜煤惩,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炼邀。 院中可真熱鬧魄揉,春花似錦、人聲如沸拭宁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杰标。三九已至兵怯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間在旱,已是汗流浹背摇零。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人驻仅。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓谅畅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親噪服。 傳聞我的和親對象是個殘疾皇子毡泻,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 這篇文章主要講述在Mobile BI(移動商務智能)開發(fā)過程中,在網(wǎng)絡通信粘优、數(shù)據(jù)存儲仇味、登錄驗證這幾個方面涉及的加密...
    雨_樹閱讀 2,435評論 0 6
  • 在開發(fā)應用過程中,客戶端與服務端經(jīng)常需要進行數(shù)據(jù)傳輸雹顺,涉及到重要隱私安全信息時丹墨,開發(fā)者自然會想到對其進行加密,即使...
    閑庭閱讀 3,269評論 0 11
  • 本文主要介紹移動端的加解密算法的分類嬉愧、其優(yōu)缺點特性及應用贩挣,幫助讀者由淺入深地了解和選擇加解密算法。文中會包含算法的...
    蘋果粉閱讀 11,506評論 5 29
  • 加密解密没酣,曾經(jīng)是我一個畢業(yè)設計的重要組件王财。在工作了多年以后回想當時那個加密、解密算法裕便,實在是太單純了绒净。 言歸正傳,...
    我走閱讀 5,972評論 3 54
  • 今天終于給丫頭讀了《梵高》偿衰,知道了畫畫不是拍照挂疆,要畫出感情,畫出感覺哎垦,就對了囱嫩。于是也畫了悅悅理解的星夜,明亮漏设,活波...
    悅悅和書的那些事閱讀 269評論 0 0