比如给一个字符串"12345678",然后基于这个串产生一个N长度的唯一串,其实就是12345678为种子。
类似UUID,但是UUID好像长度一定是16位的?我想能够产生指定长度的唯一串。

解决方案 »

  1.   

    找一个好点的哈希函数呗。MurmurHash似乎可以满足楼主需求。
      

  2.   

    md5或是其他的 java都有实现 直接调用即可
      

  3.   

    des  加密 楼主自己研究
    package p;  
    import java.security.Key;    
    import java.security.SecureRandom;    
       
    import javax.crypto.Cipher;    
    import javax.crypto.KeyGenerator;    
       
    import sun.misc.BASE64Decoder;    
    import sun.misc.BASE64Encoder;    
       
    public class DES {    
           
      Key key;    
       
      public DES(String str) {    
        setKey(str);//生成密匙    
      }    
       
      public DES() {    
        setKey(“siyue_qi”);    
      }    
       
      /**   
       * 根据参数生成KEY   
       */   
      public void setKey(String strKey) {    
          try {    
            KeyGenerator _generator = KeyGenerator.getInstance(“DES”);    
            _generator.init(new SecureRandom(strKey.getBytes()));    
            this.key = _generator.generateKey();    
            _generator = null;    
          } catch (Exception e) {    
            throw new RuntimeException(    
               “Error initializing SqlMap class. Cause:” + e);    
          }    
      }    
       
      /**   
       * 加密String明文输入,String密文输出   
       */   
      public String getEncString(String strMing) {    
          byte[] byteMi = null;    
          byte[] byteMing = null;    
          String strMi =““;    
          BASE64Encoder base64en = new BASE64Encoder();    
          try {    
            byteMing = strMing.getBytes(“UTF8”);    
            byteMi = this.getEncCode(byteMing);    
            strMi = base64en.encode(byteMi);    
          } catch (Exception e) {    
            throw new RuntimeException(    
               “Error initializing SqlMap class. Cause:” + e);    
          } finally {    
            base64en = null;    
            byteMing = null;    
            byteMi = null;    
          }    
          return strMi;    
      }    
       
      /**   
       * 解密 以String密文输入,String明文输出   
       * @param strMi   
       * @return   
       */   
      public String getDesString(String strMi) {    
          BASE64Decoder base64De = new BASE64Decoder();    
          byte[] byteMing = null;    
          byte[] byteMi = null;    
          String strMing =““;    
          try {    
            byteMi = base64De.decodeBuffer(strMi);    
            byteMing = this.getDesCode(byteMi);    
            strMing = new String(byteMing,”UTF8”);    
          } catch (Exception e) {    
            throw new RuntimeException(    
              “Error initializing SqlMap class. Cause:” + e);    
          } finally {    
            base64De = null;    
            byteMing = null;    
            byteMi = null;    
          }    
          return strMing;    
      }    
       
      /**   
       * 加密以byte[]明文输入,byte[]密文输出   
       * @param byteS   
       * @return   
       */   
      private byte[] getEncCode(byte[] byteS) {    
          byte[] byteFina = null;    
          Cipher cipher;    
          try {    
            cipher = Cipher.getInstance(“DES”);    
            cipher.init(Cipher.ENCRYPT_MODE, key);    
            byteFina = cipher.doFinal(byteS);    
          } catch (Exception e) {    
            throw new RuntimeException(    
              “Error initializing SqlMap class. Cause:” + e);    
          } finally {    
            cipher = null;    
          }    
          return byteFina;    
      }    
       
      /**   
       * 解密以byte[]密文输入,以byte[]明文输出   
       * @param byteD   
       * @return   
       */   
      private byte[] getDesCode(byte[] byteD) {    
          Cipher cipher;    
          byte[] byteFina = null;    
          try {    
            cipher = Cipher.getInstance(“DES”);    
            cipher.init(Cipher.DECRYPT_MODE, key);    
            byteFina = cipher.doFinal(byteD);    
          } catch (Exception e) {    
            throw new RuntimeException(    
              “Error initializing SqlMap class. Cause:” + e);    
          } finally {    
            cipher = null;    
          }    
          return byteFina;    
      }    
       
      public static void main(String args[]) {    
          DES des = new DES();    
          // 设置密钥    
          //des.setKey(“12345678”);    
       
          String str1 =“密文”;    
          //DES加密    
          String str2 = des.getEncString(str1);    
          String deStr = des.getDesString(str2);    
          System.out.println(“密文:”str2);    
          //DES解密    
          System.out.println(“明文:”deStr);    
      }