Tag: sha

如何计算S3文件内容的SHA-256校验和

开箱即用的S3提供S3对象内容的MD5校验和。 但我需要计算文件内容的SHA-256校验和。 该文件可能足够大,所以我不想在内存中加载文件并计算校验和,而是我需要一个解决方案来计算校验和而不将整个文件加载到内存中。

如何创建序列密钥以保护应用程序

我有一个创建串行密钥的应用程序,如下所示: Take customername Sign customername using privatekey and sha/dsa algorithm 然后可以通过使用公钥解码并检查cuastomername匹配来检查许可证 除了生成的序列相当长之外,这没关系。 因此,客户输入序列密钥并不是真正实用,而是必须在文件中提供序列,这与薄雾应用程序和工作方式有很大不同,并且令人困惑。 许多其他应用程序仅在用户进行购买时向其提供Guid 即5bd1060b-8608-4817-93ca-207f7c828e2f 并且用户必须输入他们的电子邮件地址和guid来许可他们的申请。 这对于用户来说看起来更简洁,但我不明白这样的应用程序如何validation来自无效guid的有效guid,除非它通过检查数据库上的emailaddress / guid对在线完成。 但我真的希望在不需要在线检查的情况下进行某种validation: a>如果互联网连接/我的服务器关闭或b>他们可以通过禁用互联网访问来绕过检查,应用程序将无法运行 编辑: 我的理解解决方案如下面的答案所示: 用户购买 拿emailaddress + salt 使用SHA1加密可提供160位散列 转换为hex表示法给出20个hex值,即40个字符 最后8个字符的Lop给了一个Guid 电子邮件用户Gui和他们输入程序的电子邮件地址程序通过获取电子邮件地址,添加盐,加密ectera和检查生成有效的guid来validation此配对。 我的主要问题是我需要将盐存储在程序中的某个地方,因此如果黑客找到了盐并找出了我正在做的事情,他们可以为任何电子邮件地址创建有效的许可证密钥生成器。 我目前另一个程序的方法: 我已经生成了一个公钥/私钥对 用户购买 我通过签署电子邮件地址来生成许可证 BaseEncode生成的许可证 将许可证发送给用户 程序通过basedecoding和使用公钥解密来validation许可证 我的问题是,当我签署电子邮件地址太长时,我最终把它放在一个文件而不是用户将其输入到字段中,但问题可能是我是base64encoding而不是转换为Hex。 签名输出可以持续多长时间,取决于输入的长度还是始终相同? 因为我使用公钥解密密钥,我可以删除许可密钥的一些字符,但如果生成密钥只有40个字符,我想这是可以的 我认为这种方法的优点是,即使黑客知道我在做什么,他们也无法创建许可证生成器,因为他们没有,并且无法获取私钥,因为它只存储在我的服务器上。 他们只能在创建新的私钥/公钥配对时生成许可证,然后如果我的应用程序有自己编码的公钥,则应用程序可以拒绝许可证。 当然,他们可以破解应用程序,但如果应用程序定期更新,这将成为很多努力。 总而言之:我是否正确理解了这一点,哪种方法最好,以及为第二种方法生成了多少数据。

如何在java中创建SHA224SUM

我需要在Android下的java中使用模拟Linux命令SHA224SUM从我的字符串创建哈希。 我尝试使用: MessageDigest messageDigest224 = MessageDigest.getInstance( “SHA-224”); byte[] bSHA224 = messageDigest224.digest( “hello word”.getBytes()); 但我得到错误 MessageDigest SHA-224 implementation not found java.security.NoSuchAlgorithmException: MessageDigest SHA-224 implementation not found SHA-512,SHA-1算法工作正常。 请让我链接到Java中的模拟SHA224。 请任何想法。

无法让SHA-256哈希与我的Spring安全性一起工作

我正在使用Spring Roo框架,它使用Spring Security作为安全框架。 我按以下方式配置它: <!– –> 为了使密码匹配,我编辑了UserController create方法,因此使用SHA-256哈希存储密码,与在安全配置文件applicationContext-security.xml配置的相同。 我是这样做的: public String create(@Valid User user, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest) throws NoSuchAlgorithmException, UnsupportedEncodingException { if (bindingResult.hasErrors()) { populateEditForm(uiModel, usuario); return “security/users/create”; } MessageDigest md = MessageDigest.getInstance(“SHA-256”); md.update(user.getPassword().getBytes(“UTF-8”)); byte[] digest = md.digest(); usuario.setPassword( new String(digest, “UTF-8”)); uiModel.asMap().clear(); user.persist(); return “redirect:/security/users/” + encodeUrlPathSegment(usuario.getId().toString(), httpServletRequest); } 我尝试将密码设置为admin ,这与默认用户提供的相同:admin,密码:admin配置文件,以检查我的create方法生成的密码是否匹配。 […]

无法在Java中输出正确的哈希值。 哪里不对?

在我的Android应用程序中,我有一个SHA256哈希值,我必须使用RIPEMD160消息摘要算法进一步哈希。 我可以输出任何字符串的正确sha256和ripemd160哈希,但是当我尝试使用ripemd160散列sha256哈希时,我得到一个不正确的哈希值。 根据在线哈希计算器,字符串’test’(全部小写)的SHA256值为: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 字符串’test’的RIPEMD160值为: 5e52fee47e6b070565f74372468cdc699de89107 根据在线计算,使用ripemd160散列生成的sha256哈希的值为: 4efc1c36d3349189fb3486d2914f56e05d3e66f8 而我的应用程序给我的是: cebaa98c19807134434d107b0d3e5692a516ea66 这显然是错的。 这是我的代码: public static String toRIPEMD160(String in) { byte[] addr = in.getBytes(); byte[] out = new byte[20]; RIPEMD160Digest digest = new RIPEMD160Digest(); byte[] sha256 = sha256(addr); digest.update(sha256,0,sha256.length); digest.doFinal(out,0); return getHexString(out); } public static byte[] sha256(byte[] data) { byte[] sha256 = new byte[32]; try { sha256 […]

字符串SHA-512编码:C#和JAVA结果不同

我试图比较sha512编码的两个不同的字符串。 但是,结果是不同的。 它可能是我所说的编码问题。 我希望你能帮助我。 这是我的Java代码: MessageDigest digest = java.security.MessageDigest.getInstance(“SHA-512”); digest.update(MyString.getBytes()); byte messageDigest[] = digest.digest(); // Create Hex String StringBuffer hexString = new StringBuffer(); for (int i = 0; i < messageDigest.length; i++) { String h = Integer.toHexString(0xFF & messageDigest[i]); while (h.length() < 2) h = "0" + h; hexString.append(h); } return hexString.toString(); 而且,这是我的C#代码: UnicodeEncoding UE […]

如何使“MessageDigest SHA-1和Signature NONEwithRSA”等同于“Signature SHA1withRSA”

我有兴趣将带有RSA签名的SHA-1哈希应用于某些数据,但我需要分两步完成 – 首先应用哈希然后对数据进行签名。 Signature.sign()函数似乎创建了一个最终签名的更复杂(ASN.1?)的数据结构(请参阅此问题 )。 如何在不使用任何外部库(如BouncyCastle)的情况下制作两个等效文件? 使用签名应用哈希并签名: PrivateKey privatekey = (PrivateKey) keyStore.getKey(alias, null); … sig = Signature.getInstance(“SHA1withRSA”, “SunMSCAPI”); sig.initSign(privatekey); sig.update(data_to_sign); byte[] bSignedData_CAPISHA1_CAPIRSA = sig.sign(); 通过MessageDigest应用哈希,然后使用签名进行签名: PrivateKey privatekey = (PrivateKey) keyStore.getKey(alias, null); … MessageDigest sha1 = MessageDigest.getInstance(“SHA-1”); byte[] data_to_sign = sha1.digest(bdataToSign); Signature sig = Signature.getInstance(“NONEwithRSA”, “SunMSCAPI”); sig.initSign(privatekey); sig.update(data_to_sign); byte[] bSignedData_JAVASHA1_CAPIRSA = sig.sign(); … 我正在寻找以下等价物: bSignedData_JAVASHA1_CAPIRSA == […]

Java中的HMAC SHA1签名

我正在尝试与TransUnion Web服务进行交互,我需要提供HMAC-SHA1签名来访问它。 此示例位于TransUnion文档中: 输入SampleIntegrationOwner2008‐11‐18T19:14:40.293Z ,安全密钥为xBy/2CLudnBJOxOtDhDRnsDYq9HTuDVr2uCs3FMzoxXEA/Od9tOuwSC70+mIfpjeG68ZGm/PrxFf/s/CzwxF4Q==创建/UhwvT/kY9HxiXaOjpIc/BarBkc= 。 鉴于数据和密钥,我无法在Java中获得相同的结果。 我已经尝试了几个在线计算器,但也没有一个返回这个结果。 他们的文档中的示例是否不正确,或者我只是没有正确处理这些字符串? 这是我目前正在使用的代码: public static String calcShaHash (String data, String key) { String HMAC_SHA1_ALGORITHM = “HmacSHA1”; String result = null; try { Key signingKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM); Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM); mac.init(signingKey); byte[] rawHmac = mac.doFinal(data.getBytes()); result = Base64.encodeBase64String(rawHmac); } catch (Exception e) { e.printStackTrace(); } return […]

你能用PHP获得相同的Java SHA-1吗?

我发现自己需要将网站平台从Java更改为PHP,但我想保留所有用户的密码…… 在将散列值作为网站密码写入之前,我有这段代码做密码散列: MessageDigest md = null; md = MessageDigest.getInstance(“SHA”); md.update(plaintext.getBytes(“UTF-8”)); byte raw[] = md.digest(); hash = new Base64().encodeToString(raw).replaceAll(“\n”, “”).replaceAll(“\r”, “”); 我认为Java代码对密码进行了SHA-1散列,但在此之前,它是字节编码为UTF-8,之后是Base64编码。 我想让一个PHP代码做同样的事情,即为与Java相同的密码返回相同的哈希值,只是看起来我做的SHA-1哈希的PHP代码不会返回相同的SHA (-1,而不是Base64编码,我认为?)与哈希的Java Base64解码值相比时的值……这可能与我在PHP中的密码首先不是UTF-8字节编码这一事实有关(我怎么能用PHP做到这一点? PS 另一个奇怪的事情……我在Java中的密码长度都是28个字符(通常类似于这个rnwn4zTNgH30l4pP8V05lRVGmF4= )……但这些密码哈希值的Base64().decode(hash)值是10个字符长(例如[B@14e1f2b )。 我认为Base64为每3个章程做了额外的1个字符(28或27,不包括padding = charter,比那些10个字符大三分之一)所以我在做某些解码调用错误可能??? 最重要的是,PHP中的SHA-1密码散列值是40个字符长(在UTF-8 mysql数据库中),如dd94709528bb1c83d08f3088d4043f4742891f4f ?

将java中的加密代码转换为Ruby

我一直在尝试将java中的加密代码转换为ruby,但我无法完全完成。 我得到不同的价值观。 passphrase = passphrase + STATIC_KEY; byte[] key = passphrase.getBytes(“UTF-8”); MessageDigest sha = MessageDigest.getInstance(“SHA-1”); key = sha.digest(key); key = Arrays.copyOf(key, 16); SecretKey secretKey = new SecretKeySpec(key, “AES”); Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”); IvParameterSpec initialisationVector = new IvParameterSpec( new byte[16]); cipher.init(Cipher.ENCRYPT_MODE, secretKey, initialisationVector); byte[] encryptedData = cipher.doFinal(plainText.getBytes(“UTF-8”)); return SimpleCrypto.toHex(encryptedData); 任何人都可以让我知道,如何做到这一点ruby。 unencrypted = “passphrase” c = OpenSSL::Cipher.new(“aes-128-cbc”) […]