
可以检查是否有更新的驱动程序。也可以咨询您的签名设备或驱动程序的制造商,获取可能会解决此错误的更新驱动程序。
如果签名设备不支持哈希算法,则解决方案会按照此页面中的说明,将注册表项 aSignHash 设置为 SHA1。但是,并不建议使用这种方法。
因为这可能会将 SHA1 设置为所有签名的默认哈希算法,整个行业均不赞成使用此方法。因此,Adobe 强烈建议咨询您的签名中搭肆设备或驱动程序的制造商,以获取支持 SHA256 或更高
哈希的较新设备或驱动程序。
解决办法:
用本机(切记不要远程连接另一台电脑去 *** 作)安装网银需要的软件。然后插入U盾到电脑上面卖轿,把银行提供的签名用的软件都安装好。
比如“建行工商注册认证”,在桌面运行这个软件签名,不要用adobe acrobat,或者adobe reader签名,是不会成功的。
加密服务提供程序是执行身份验证,编码和加密服务的程序,基于Windows的应用程序通过Microsoft加密应用程序编程接口访问该程序。
生成新证书的申请时,该申枝数请中的信息先从申请程序发送到 CryptoAPI。CryptoAPI 向安装在计算机上或计算机可以访问的设备上的 CSP 提供正确的数据。
public class Sha1 {
/**
* SHA1 安全加密算法
* @param maps 参数key-value map集合
* @return
* @throws DigestException
*/
public static String SHA1(Map<String,Object> maps) throws DigestException {
//获取信息摘要 - 参数字典排序后字符串
String decrypt = getOrderByLexicographic(maps)
try {
//指定sha1算法
MessageDigest digest = MessageDigest.getInstance("SHA-1")
digest.update(decrypt.getBytes())
//获取字节数组
byte messageDigest[] = digest.digest()
// Create Hex String
StringBuffer hexString = new StringBuffer()
// 字节数组转换为 十六进制 数
for (int i = 0 i < messageDigest.length i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF)
if (shaHex.length() < 2) {
hexString.append(0)
轿激 梁帆贺}
hexString.append(shaHex)
}
return hexString.toString().toUpperCase()
} catch (NoSuchAlgorithmException e) {
e.printStackTrace()
throw new DigestException("签名错误!")
}
}
/**
* 获取参数的字典排序 橡派
* @param maps 参数key-value map集合
* @return String 排序后的字符串
*/
private static String getOrderByLexicographic(Map<String,Object> maps){
return splitParams(lexicographicOrder(getParamsName(maps)),maps)
}
/**
* 获取参数名称 key
* @param maps 参数key-value map集合
* @return
*/
private static List<String> getParamsName(Map<String,Object> maps){
List<String> paramNames = new ArrayList<String>()
for(Map.Entry<String,Object> entry : maps.entrySet()){
paramNames.add(entry.getKey())
}
return paramNames
}
/**
* 参数名称按字典排序
* @param paramNames 参数名称List集合
* @return 排序后的参数名称List集合
*/
private static List<String> lexicographicOrder(List<String> paramNames){
Collections.sort(paramNames)
return paramNames
}
/**
* 拼接排序好的参数名称和参数值
* @param paramNames 排序后的参数名称集合
* @param maps 参数key-value map集合
* @return String 拼接后的字符串
*/
private static String splitParams(List<String> paramNames,Map<String,Object> maps){
StringBuilder paramStr = new StringBuilder()
for(String paramName : paramNames){
paramStr.append(paramName)
for(Map.Entry<String,Object> entry : maps.entrySet()){
if(paramName.equals(entry.getKey())){
paramStr.append(String.valueOf(entry.getValue()))
}
}
}
return paramStr.toString()
}
MD5(RFC1321)是Rivest于1991年对MD4的改进版本。它对输入仍以512位分组,其输出是4个32位字的级联,与MD4相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好。
MD5是一种不可逆的加密算法,目前是最牢靠的加密算法之一,尚没有能够逆运算的程序被开发出来,它对应任何字符串都可以加密成一段唯一的固定孝隐长度的代码。
SHA1是由NISTNSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。
SHA-1设计时基于和MD4相同原理,并且模仿了该算法。SHA-1是由美国标准技术局(NIST)颁布的国家标准,是一种应用最为广泛的hash函数算法,也是目前最先进的加密技术,被政府部门和私营业主用来处理敏感的信息。而SHA-1基于MD5,MD5又基于MD4。
本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值。由于CRC32产生校验值时源数据块的每一个bit(位)都参与了计算,所以数据块中即使只有一位发生了变化,也会得到不同的CRC32值。
扩展资料:
Hash算法在信息安全方面的应用主要体现在以下的3个方面:
1)文件校验
我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
MD5Hash算法的”数字指纹”特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5checksum的命令。
2)数字签名
Hash算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对Hash值,又称”数字摘要”进行数字签名,在统计上可以认衫慎模为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
3)鉴权协议
如下的鉴权协议又被称作”挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。
当然,hash函数并不是完或缓全可靠,不同文件产生相同MD5和SHA1的几率还是有的,只是不高,在我们论坛里提供的系统光盘,你想对这么几个文件存在相同HASH的不同文件根本是不可能的。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)