ruby des解密

后端用隨手百度來代碼寫了個des加密叙凡,能跑而不知其所以然驳庭,ruby適配其進行解密,話不多說,直接上代碼:
ruby代碼如下

require 'openssl'

# DES加密
def encrypt(context, key: 'key1')
  cipher = OpenSSL::Cipher::DES.new(:ECB).encrypt.tap { |obj| obj.key = key }
  cipher.padding = 5
  encrypt = (cipher.update(context) + cipher.final()).unpack('H*')
  encrypt[0]
end

# DES解密
def decrypt(context, key: 'key1')
  cipher = OpenSSL::Cipher::DES.new(:ECB).decrypt.tap { |obj| obj.key =  key}
  cipher.padding = 5
  cipher.update([context].pack('H*')) + cipher.final
end

orgStr = "ABCD1234"

puts "原文 #{orgStr}"
enStr = encrypt(orgStr)
puts "密文 #{enStr}"#99efa7e595c3034410dd790d60424fb9
deStr = decrypt(enStr)
puts "解密文 #{deStr}"

順便附上java代碼方便對照

import javax.crypto.Cipher;
import java.io.PrintStream;
import java.security.Key;
import java.security.Security;
import javax.crypto.spec.SecretKeySpec;
import com.sun.crypto.provider.SunJCE;

public class DesUtils {
    private static String strDefaultKey = "key1";
      private Cipher encryptCipher = null;
      private Cipher decryptCipher = null;
      
      public static String byteArr2HexStr(byte[] arrB)
        throws Exception
      {
        int iLen = arrB.length;
        
        StringBuffer sb = new StringBuffer(iLen * 2);
        for (int i = 0; i < iLen; i++)
        {
          int intTmp = arrB[i];
          while (intTmp < 0) {
            intTmp += 256;
          }
          if (intTmp < 16) {
            sb.append("0");
          }
          sb.append(Integer.toString(intTmp, 16));
        }
        return sb.toString();
      }
      
      public static byte[] hexStr2ByteArr(String strIn)
        throws Exception
      {
        byte[] arrB = strIn.getBytes();
        int iLen = arrB.length;
        
        byte[] arrOut = new byte[iLen / 2];
        for (int i = 0; i < iLen; i += 2)
        {
          String strTmp = new String(arrB, i, 2);
          arrOut[(i / 2)] = ((byte)Integer.parseInt(strTmp, 16));
        }
        return arrOut;
      }
      
      public DesUtils()
        throws Exception
      {
        this(strDefaultKey);
      }
      
      public DesUtils(String strKey)
        throws Exception
      {
        Security.addProvider(new SunJCE());
        Key key = getKey(strKey.getBytes());
        
        this.encryptCipher = Cipher.getInstance("DES");
        this.encryptCipher.init(1, key);
        
        this.decryptCipher = Cipher.getInstance("DES");
        this.decryptCipher.init(2, key);
      }
      
      public byte[] encrypt(byte[] arrB)
        throws Exception
      {
        return this.encryptCipher.doFinal(arrB);
      }
      
      public String encrypt(String strIn)
        throws Exception
      {
        return byteArr2HexStr(encrypt(strIn.getBytes()));
      }
      
      public byte[] decrypt(byte[] arrB)
        throws Exception
      {
        return this.decryptCipher.doFinal(arrB);
      }
      
      public String decrypt(String strIn)
        throws Exception
      {
        return new String(decrypt(hexStr2ByteArr(strIn)));
      }
      
      private Key getKey(byte[] arrBTmp)
        throws Exception
      {
        byte[] arrB = new byte[8];
        for (int i = 0; (i < arrBTmp.length) && (i < arrB.length); i++) {
          arrB[i] = arrBTmp[i];
        }
        Key key = new SecretKeySpec(arrB, "DES");
        
        return key;
      }
      
      public static void main(String[] args)
      {
        try
        {
          String str = "ABCD1234";
          DesUtils des = new DesUtils(strDefaultKey);
          System.out.println("原文" + str);
          String enStr = des.encrypt(str);
          System.out.println("密文" + enStr);//99efa7e595c3034410dd790d60424fb9
          String deStr = des.decrypt(enStr);
          System.out.println("解密文" + deStr);
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }
      }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炬搭,一起剝皮案震驚了整個濱河市蜈漓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宫盔,老刑警劉巖迎变,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異飘言,居然都是意外死亡衣形,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門姿鸿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谆吴,“玉大人,你說我怎么就攤上這事苛预【淅牵” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵热某,是天一觀的道長腻菇。 經(jīng)常有香客問我,道長昔馋,這世上最難降的妖魔是什么筹吐? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮秘遏,結(jié)果婚禮上丘薛,老公的妹妹穿的比我還像新娘。我一直安慰自己邦危,他們只是感情好洋侨,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著倦蚪,像睡著了一般希坚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陵且,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天裁僧,我揣著相機與錄音,去河邊找鬼滩报。 笑死锅知,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脓钾。 我是一名探鬼主播售睹,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼可训!你這毒婦竟也來了昌妹?” 一聲冷哼從身側(cè)響起捶枢,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎飞崖,沒想到半個月后烂叔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡固歪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年蒜鸡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牢裳。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡逢防,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蒲讯,到底是詐尸還是另有隱情忘朝,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布判帮,位于F島的核電站局嘁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晦墙。R本人自食惡果不足惜悦昵,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望偎痛。 院中可真熱鬧旱捧,春花似錦独郎、人聲如沸踩麦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谓谦。三九已至,卻和暖如春贪婉,著一層夾襖步出監(jiān)牢的瞬間反粥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工疲迂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留才顿,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓尤蒿,卻偏偏與公主長得像郑气,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子腰池,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

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

  • 更新:MD5加密是單向的跨跨,只能加密不能解密(破解除外)潮峦。標(biāo)題可能會引起讀者誤解,已經(jīng)改正勇婴,感謝Li_Cheng同學(xué)...
    葛高召閱讀 2,233評論 0 4
  • 為了防止我們的數(shù)據(jù)泄露窄做,我們往往會對數(shù)據(jù)進行加密,特別是敏感數(shù)據(jù)慰技,我們要求的安全性更高椭盏。下面將介紹幾種常用的加密算...
    Chauncey_Chen閱讀 2,906評論 0 20
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,089評論 1 32
  • 今天晚上媽媽帶我和姐姐去電影院看了一部電影。這部電影的名字就叫《紅海行動》吻商,這是一部保衛(wèi)世界和平的電影掏颊,剛...
    45cbff51831c閱讀 424評論 1 1
  • 我意識到瞬變中提到的"大象"就是感受。在人的行為中大象扮演即為重要的角色艾帐。而我以前卻不了解感受乌叶,不了解情緒。現(xiàn)在慢...
    心_聲閱讀 202評論 0 0