精华内容
下载资源
问答
  • [导读]做对接的时候,服务商做的AES加密通过SHA1PRNG算法(只要password一样,每次生成的数组都是一样的,所以可以用来做加密解密的key)进行了又一次加密,搞了好几个小时,直接看对应的代码吧做对接的时候,服务商做...

    [导读]做对接的时候,服务商做的AES加密通过SHA1PRNG算法(只要password一样,每次生成的数组都是一样的,所以可以用来做加密解密的key)进行了又一次加密,搞了好几个小时,直接看对应的代码吧

    做对接的时候,服务商做的AES加密通过SHA1PRNG算法(只要password一样,每次生成的数组都是一样的,所以可以用来做加密解密的key)进行了又一次加密,搞了好几个小时,直接看对应的代码吧,可以参考一下,只有Java的加密源码private static byte[] encrypt(byte[] byteContent, byte[] password) throws Exception

    {

    KeyGenerator kgen = KeyGenerator.getInstance("AES");

    SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");

    secureRandom.setSeed(password);

    kgen.init(128, secureRandom);

    SecretKey secretKey = kgen.generateKey();

    byte[] enCodeFormat = secretKey.getEncoded();

    SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");

    Cipher cipher = Cipher.getInstance("AES");

    cipher.init(1, key);

    byte[] result = cipher.doFinal(byteContent);

    return result;

    }private function _pkcs5Pad($text, $blockSize)

    {

    $pad = $blockSize - (strlen($text) % $blockSize);

    return $text . str_repeat(chr($pad), $pad);

    }

    private function _pkcs5Unpad($text)

    {

    $end = substr($text, -1);

    $last = ord($end);

    $len = strlen($text) - $last;

    if(substr($text, $len) == str_repeat($end, $last))

    {

    return substr($text, 0, $len);

    }

    return false;

    }

    public function encrypt($encrypt, $key)

    {

    $blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

    $paddedData = $this->_pkcs5Pad($encrypt, $blockSize);

    $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

    $iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);

    $key2 = substr(openssl_digest(openssl_digest($key, 'sha1', true), 'sha1', true), 0, 16);

    $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key2, $paddedData, MCRYPT_MODE_ECB, $iv);

    return base64_encode($encrypted);

    }

    public function decrypt($decrypt, $key)

    {

    $decoded = $this->hex2bin($decrypt);

    $blockSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

    $iv = mcrypt_create_iv($blockSize, MCRYPT_RAND);

    $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $decoded, MCRYPT_MODE_ECB, $iv);

    return $this->_pkcs5Unpad($decrypted);

    }

    function hex2bin($str)

    {

    $sbin = "";

    $len = strlen($str);

    for($i = 0; $i 

    {

    $sbin .= pack("H*", substr($str, $i, 2));

    }

    return $sbin;

    }

    展开全文
  • 做对接的时候,服务商做的AES加密通过SHA1PRNG算法(只要password一样,每次生成的数组都是一样的,所以可以用来做加密解密的key)进行了又一次加密,搞了好几个小时,直接看对应的代码吧,可以参考一下,只有Java的...

    做对接的时候,服务商做的AES加密通过SHA1PRNG算法(只要password一样,每次生成的数组都是一样的,所以可以用来做加密解密的key)进行了又一次加密,搞了好几个小时,直接看对应的代码吧,可以参考一下,只有Java的加密源码

    private static byte[] encrypt(byte[] byteContent, byte[] password) throws Exception

    {

    KeyGenerator kgen = KeyGenerator.getInstance("AES");

    SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");

    secureRandom.setSeed(password);

    kgen.init(128, secureRandom);

    SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded();

    SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");

    Cipher cipher = Cipher.getInstance("AES");

    cipher.init(1, key); byte[] result = cipher.doFinal(byteContent); return result;

    }

    private function _pkcs5Pad($text, $blockSize)

    {

    $pad = $blockSize - (strlen($text) % $blockSize);

    return $text . str_repeat(chr($pad), $pad);

    }

    private function _pkcs5Unpad($text)

    {

    $end = substr($text, -1);

    $last = ord($end);

    $len = strlen($text) - $last;

    if(substr($text, $len) == str_repeat($end, $last))

    {

    return substr($text, 0, $len);

    }

    return false;

    }

    public function encrypt($encrypt, $key)

    {

    $blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

    $paddedData = $this->_pkcs5Pad($encrypt, $blockSize);

    $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

    $iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);

    $key2 = substr(openssl_digest(openssl_digest($key, 'sha1', true), 'sha1', true), 0, 16);

    $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key2, $paddedData, MCRYPT_MODE_ECB, $iv);

    return base64_encode($encrypted);

    }

    public function decrypt($decrypt, $key)

    {

    $decoded = $this->hex2bin($decrypt);

    $blockSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

    $iv = mcrypt_create_iv($blockSize, MCRYPT_RAND);

    $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $decoded, MCRYPT_MODE_ECB, $iv);

    return $this->_pkcs5Unpad($decrypted);

    }

    function hex2bin($str)

    {

    $sbin = "";

    $len = strlen($str);

    for($i = 0; $i < $len; $i += 2)

    {

    $sbin .= pack("H*", substr($str, $i, 2));

    }

    return $sbin;

    }

    展开全文
  • ruby实现SHA1PRNG

    2018-05-04 18:13:00
    工作中经常会遇到不同开发语言之间的接口加解密,我们的接口提供方用Java语言开发,用到了...Java SecureRandom 两种伪随机数算法( SHA1PRNG 与 NativePRNG )SHA1PRNG 实现原理是通过不断对当前Hash值进行再一次S...
    工作中经常会遇到不同开发语言之间的接口加解密,我们的接口提供方用Java语言开发,用到了SHA1PRNG
    PRNG 是一种伪随机数生成器,它一般都是使用特定的随机种子,根据某个特定的算法生成伪随机序列,通常用于给其他加解密算法提供种子。
    Java SecureRandom 两种伪随机数算法( SHA1PRNG 与 NativePRNG )

    SHA1PRNG 实现原理是通过不断对当前Hash值进行再一次SHA1哈希而成,当给定种子的情况下,每次输出都是基于上次的结果。

    Java 代码
    SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
    random.setSeed(encryptKey.getBytes());
    kgen.init(128, random);
    
    
    

       Ruby 代码如下

        def sha1_prng(key)
          key = OpenSSL::Digest.digest("SHA1", key)
          key_bytes = OpenSSL::Digest.digest("SHA1", key).bytes[0..15]
          for i in 0...key_bytes.size
            if key_bytes[i] > 128
              key_bytes[i] = key_bytes[i] - 256
            end
          end
          key_bytes.pack('c*').force_encoding("UTF-8")
        end
    

     

    转载于:https://www.cnblogs.com/lizhenjiang/p/8991951.html

    展开全文
  • SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); random.setSeed(strKey.getBytes("utf-8")); keygen.init(128, random); // keygen.init(128, new SecureRandom(strKey.getBytes())); desKey = ...

    最近接入接口时遇到要求传输参数进行aes加密,接口文档提供的java实例代码如下:

    /**

    * 加密函数

    *

    * @param content 加密的内容

    * @param strKey 密钥

    * @return 返回二进制字符数串

    * @throws Exception

    */

    public static byte[] enCrypt(String content, String strKey) throws Exception {

    KeyGenerator keygen;

    SecretKey desKey;

    Cipher c;

    byte[] cByte;

    String str = content;

    keygen = KeyGenerator.getInstance("AES");

    SecureRandom random = SecureRandom.getInstance("SHA1PRNG");

    random.setSeed(strKey.getBytes("utf-8"));

    keygen.init(128, random);

    // keygen.init(128, new SecureRandom(strKey.getBytes()));

    desKey = keygen.generateKey();

    c = Cipher.getInstance("AES");

    c.init(Cipher.ENCRYPT_MODE, desKey);

    cByte = c.doFinal(str.getBytes("UTF-8"));

    return cByte;

    }

    /**

    * 2 进制转化 16 进制

    *

    * @param buf

    * @return

    */

    public static String parseByte2HexStr(byte buf[]) {

    StringBuffer sb = new StringBuffer();

    for (int i = 0; i < buf.length; i++) {

    String hex = Integer.toHexString(buf[i] & 0xFF);

    if (hex.length() == 1) {

    hex = '0' + hex;

    }

    sb.append(hex.toUpperCase());

    }

    return sb.toString();

    }

    php代码如下:

    $key='123456';

    $key = substr(openssl_digest(openssl_digest($key, 'sha1', true), 'sha1', true), 0, 16);

    $data = openssl_encrypt($str, 'AES-128-ECB', $key, OPENSSL_RAW_DATA);

    $data = strtolower(bin2hex($data));

    展开全文
  • Python - AES sha1prng 加密解密总结 Max.Bai 2020-11 上篇文章是当时研究AES加密的时候的记录,来龙去脉可以取看这篇 python3 - AES 加密实现java中SHA1PRNG 算法 好多人回复并提问,我发现还有必要写这篇做...
  • python3 - AES 加密实现java中SHA1PRNG 算法

    千次阅读 热门讨论 2019-02-18 20:39:49
    python3 - Java AES 加密实现java中SHA1PRNG 算法 Max.Bai 2019-02 0x00 事由 最近和java项目对接遇到AES加密算法,java代码有SecureRandom.getInstance("SHA1PRNG"); python实在找不到对应的方法,C#,php,...
  • tomcat启动慢,熵池阻塞变慢详解, Creation of SecureRandom instance for session ID generation using [SHA1PRNG]took [xx] milliseconds
  • 本文主要介绍 java AES 中出现的随机算法SHA1PRNG 生成key,在 golang 中的实现方法 描述 先来看 java 代码 // java 代码 // content:test123 // encryptKey:123456 // 加密结果为:668C826342B8703D86E8BBF...
  • secureRandom 实现 之 SHA1PRNG

    万次阅读 2015-09-07 08:58:24
    SecureRandom Implementation (sun.security.provider.SecureRandom – SHA1PRNG) January 15, 2014 Categories: Developer, Security Best Practices Tags: java, securerandom, software development ...
  • <? class AES { /** * * @param string $string 需要加密的字符串 * @param string $key 密钥 ... // 对接java,服务商做的AES加密通过SHA1PRNG算法(只要password一样,每次生成的数组都是一样的..
  • 1. 启动项目java -jar xxxx.jar令楼主没有想到的是:程序卡主了,卡在了数据库建立连接的位置。(查看方法方式:jstack 即可)2. 堆栈信息由于是项目刚一启动,初始化数据库连接池,并没有太多的线程堆栈。这里我贴...
  • 1. 启动项目java -jar xxxx.jar令楼主没有想到的是:程序卡主了,卡在了数据库建立连接的位置。(查看方法方式: jstack 即可)2. 堆栈信息由于是项目刚一启动,初始化数据库连接池,并没有太多的线程堆栈。这里我贴...
  • 好久没有使用MyEclipse10了,今天打开看了以前大学的项目,...SEVERE: Exception initializing random number generator using algorithm [SHA1PRNG] java.security.NoSuchAlgorithmException: SHA1PRNG SecureRand...
  • 正常的启动tomcat7而且并没有报错,等待了很久终于看到日志打印出来启动成功了在这里等了4分钟Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase....有两种解决办法:1.在Tomcat环境中解...
  • 做对接的时候,服务商做的AES加密通过SHA1PRNG算法(只要password一样,每次生成的数组都是一样的,所以可以用来做加密解密的key)进行了又一次加密,搞了好几个小时,直接看对应的代码吧,可以参考一下,只有Java的...
  • Tomcat 使用 SHA1PRNG 算法是基于 SHA-1 算法实现且保密性较强的伪随机数生成器。 在 SHA1PRNG 中,有一个种子产生器,它根据配置执行各种操作。 Linux 中的随机数可以从两个特殊的文件中产生,一个是 /dev/...
  • The server program use the password as random seed to generate a 128 bits AES key with SHA1PRNG algorithm. The same password with gen the same key. Now i am coding the client program with golang. How...
  • Java中的AES加密(SHA1PRNG)转换为C#

    千次阅读 2019-09-28 18:16:44
    Java代码: 1 KeyGenerator aesGen = KeyGenerator.getInstance("AES");...2 SecureRandom secureRadmon= new SecureRandom().getInstance("SHA1PRNG"); 3 secureRadmon.setSeed(aesKey.getBytes()); 4 aesGen...
  • IBM JDK SHA1PRNG 算法比 IBMSecureRandom 慢    java.security.SecureRandom random = java.security.SecureRandom.getInstance("SHA1PRNG"); 换成  java.security.SecureRandom random = java...
  • 经过沟通发现接口方使用了SHA1PRNG算法,对原密码计算后做为Des的加密Key。 因此在php中也需要先对原密码做相应计算才能保持结果一致。 java加密 public static final String ALGORITHM = "DES"; public ...
  • centos7.2 上运行springboot项目,启动耗时很长:Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [297,593] milliseconds. 解决:找到jdk安装目录下的/jre/lib/security/java...
  • 问题描述 Linux环境部署jar包,tomcat启动极慢。...Creation of SecureRandom instance for session ID generation using [SHA1PRNG]took [449393] milliseconds 解决办法及原理 参考本站大佬文章
  • WARNING [main] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [1,139,942] milliseconds. ...
  • SHA1PRNG算法是基于SHA-1算法实现且保密性较强的伪随机数生成器。 在这种算法中,有一个种子产生器 (1)如果java.security.egd属性或securerandom.source属性指定的是“file:/dev/random"或file:/dev/...
  • 刚部署好程序,第一次登录时,加载非常得慢,查看log日志发现:Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [33,755] milliseconds. 说什么创建用于会话ID生成的...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 364
精华内容 145
关键字:

sha1prng