Inlägg

Inlägg som asdfgh har skrivit i forumet
Av asdfgh

Hej igen nu har jag byggt om lite baserat på denna länk. Så valde jag att jämföra strängar istället. Så HashHandler ser nu ut:

package database; import java.math.BigInteger; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.spec.InvalidKeySpecException; import java.util.Arrays; import java.util.Random; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; public class HashHandling { private static final Random RANDOM = new SecureRandom(); private static final int ITERATIONS = 10000; private static final int KEY_LENGTH = 256; private static final char[] hexArray = "0123456789ABCDEF".toCharArray(); private static final byte[] idSalt = getNextSalt(); public static byte[] getNextSalt() { byte[] salt = new byte[16]; RANDOM.nextBytes(salt); return salt; } public static byte[] passwordHashing(char[] password, byte[] salt) { PBEKeySpec spec = new PBEKeySpec(password, salt, ITERATIONS, KEY_LENGTH); Arrays.fill(password, Character.MIN_VALUE); try { SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); return skf.generateSecret(spec).getEncoded(); } catch(NoSuchAlgorithmException | InvalidKeySpecException e) { throw new AssertionError("Error whil hashing a password: "+e.getMessage(), e); } finally { spec.clearPassword(); } } public static boolean isExpectedPassword(String pw, String expectedHash) { return expectedHash.equals(pw); } public static byte[] idHashing(char[] id) { return passwordHashing(id, idSalt); } public static String hashToString(byte[] toConvert) { char[] hexChars = new char[toConvert.length * 2]; for ( int j = 0; j < toConvert.length; j++ ) { int v = toConvert[j] & 0xFF; hexChars[j * 2] = hexArray[v >>> 4]; hexChars[j * 2 + 1] = hexArray[v & 0x0F]; } return new String(hexChars); } public static byte[] stringToHashByteVal(String toConvert) { byte[] b = new byte[toConvert.length() / 2]; for (int i = 0; i < b.length; i++) { int index = i * 2; int v = Integer.parseInt(toConvert.substring(index, index + 2), 16); b[i] = (byte) v; } return b; } }

Och test main:

package main; import database.DatabaseHandler; import database.HashHandling; import database.PostTableRow; import database.UsersTableRow; import java.math.BigInteger; import java.sql.Timestamp; import java.util.ArrayList; import database.TableRow; public class Main { public static void main(String[] args) throws Exception{ byte[] salt = HashHandling.idHashing(HashHandling.hashToString(HashHandling.getNextSalt()).toCharArray()); String orgiPw = new String("test"); byte[] hashPw = HashHandling.passwordHashing(orgiPw.toCharArray(), salt); String HashStr = HashHandling.hashToString(hashPw); byte[] conBack = HashHandling.stringToHashByteVal(HashStr); String conBackStr = HashHandling.hashToString(conBack); System.out.println("Orgi string: "+HashStr+" converted string: "+conBackStr); if(HashStr.equals(conBackStr)) { System.out.println("Their the same!"); } if(HashHandling.isExpectedPassword(conBackStr, HashStr)) { System.out.println("Converter seam to work."); } else { System.out.println("Failed"); System.out.println("\t Conback:\t"+conBackStr); System.out.println("\t Orgi: \t"+conBackStr); } } }

Vilket get outputen:

Orgi string: A6F3EF6B2E7F7C4EF47968F4DF4A0F12E8D316E2C2755FFF7C2B7F4366ACE3F6 converted string: A6F3EF6B2E7F7C4EF47968F4DF4A0F12E8D316E2C2755FFF7C2B7F4366ACE3F6 Their the same! Converter seam to work.

Vilket känns vettigt men ni får gärna säga till om ni ser något som verka konstigt eller rent utsagt fel.

Av asdfgh

Hmm verka som att det finns lite stack trådar om detta, vilket jag måste undersöka vidare....

Av asdfgh

sha256 || java || string byte[] converterings problem.

Hejsan!

Så jag håller på att frächa upp java:n men stött på lite problem som jag tror sker i denna metod (Tror det är Integer.parseInt() som ställer tilldet):

public static byte[] stringToHashByteVal(String toConvert) { byte[] b = new byte[toConvert.length() / 2]; for (int i = 0; i < b.length; i++) { int index = i * 2; int v = Integer.parseInt(toConvert.substring(index, index + 2), 16); b[i] = (byte) v; } return b; }

Så det jag gör just nu är helt enkelt att jag hash ett "lösenord" via sha256 som lagras i databas tillsammans med idividuelt salt i en hex sträng (dvs 64 tecken lång) sedan när jag ska konverta tillbaka till en byte[] för att jämföra med "användar" input lösen (sträng) så tror jag det blir fel. Min exempel kod nedan:
HashHandler:

package database; import java.math.BigInteger; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.spec.InvalidKeySpecException; import java.util.Arrays; import java.util.Random; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; public class HashHandling { private static final Random RANDOM = new SecureRandom(); private static final int ITERATIONS = 10000; private static final int KEY_LENGTH = 256; private static byte[] idSalt = getNextSalt(); public static byte[] getNextSalt() { byte[] salt = new byte[16]; RANDOM.nextBytes(salt); return salt; } public static byte[] passwordHashing(char[] password, byte[] salt) { PBEKeySpec spec = new PBEKeySpec(password, salt, ITERATIONS, KEY_LENGTH); Arrays.fill(password, Character.MIN_VALUE); try { SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); return skf.generateSecret(spec).getEncoded(); } catch(NoSuchAlgorithmException | InvalidKeySpecException e) { throw new AssertionError("Error whil hashing a password: "+e.getMessage(), e); } finally { spec.clearPassword(); } } public static boolean isExpectedPassword(char[] password, byte[] salt, byte[] expectedHash) { byte[] pwdHash = passwordHashing(password, salt); Arrays.fill(password, Character.MIN_VALUE); if(pwdHash.length != expectedHash.length) { return false; } for(int i = 0; i < pwdHash.length; i++) { if(pwdHash[i] != expectedHash[i]) { return false; } } return true; } public static byte[] idHashing(char[] id) { return passwordHashing(id, idSalt); } public static String hashToString(byte[] toConvert) { return String.format("%064x", new BigInteger(1, toConvert)); } public static byte[] stringToHashByteVal(String toConvert) { byte[] b = new byte[toConvert.length() / 2]; for (int i = 0; i < b.length; i++) { int index = i * 2; int v = Integer.parseInt(toConvert.substring(index, index + 2), 16); b[i] = (byte) v; } return b; } }

Nuvarande main för test:

package main; import database.DatabaseHandler; import database.HashHandling; import database.PostTableRow; import database.UsersTableRow; import java.math.BigInteger; import java.sql.Timestamp; import java.util.ArrayList; import database.TableRow; public class Main { public static void main(String[] args) throws Exception{ byte[] salt = HashHandling.idHashing(HashHandling.hashToString(HashHandling.getNextSalt()).toCharArray()); String orgiPw = new String("test"); byte[] hashPw = HashHandling.passwordHashing(orgiPw.toCharArray(), salt); String HashStr = HashHandling.hashToString(hashPw); byte[] conBack = HashHandling.stringToHashByteVal(HashStr); if(HashHandling.isExpectedPassword(conBack.toString().toCharArray(), salt, hashPw)) { System.out.println("Converter seam to work."); } else { System.out.println("Failed"); System.out.println("\t Conback:\t"+conBack.toString()); System.out.println("\t Orgi: \t"+hashPw.toString()); } } }

Någon som har förslag på lösning för att kunna konvertera mellan byte[] och 64 length "hex sträng"??

Tack för svar!

Av asdfgh

Hade jag kört VM så hade jag haft Linux som grund OS. Men då Windows nyckeln är inget jag kommer åt (bara service desk som sitter på annan ort) kan jag tyvärr inte bara formatera samt som nämnt ovan har de aktiverat bitlocker vilket gör att jag måste ha secure boot på osv... Jag har kommit runt detta i nuläget genom att gå in i UEFI och ändra boot loader när jag skiftar vilket är lite jobbigt tycker jag.

Ja, man kan köra virtualisering. Dock hade jag personligen valt VMplayer eller virtualbox över hyper-v (bara för det kan jag med).

Av asdfgh

Dual boot windows 10 || ubuntu

Hej jag har redan installerat både windows 10 och ubuntu 16.04 mitt problem är att windows körs med bitlocker vilket skapar extra problem.

Så det jag vill ha hjälp med är egentligen något annat sätt än via easyBCD ändra windows boot loadern att hitta linux dist. På grund av stänger jag secure boot och boota från grub behöver jag alltid kunna skriva in bit lockers nyckel. (då är det lättare att gå in i uefi och ändra mellan secureboot/leagasy samt grub/windows bootloader). Skulle dock vilja kunna köra secure boot och windows bootloader som hittar grub då det är jobbigt att behöva gå in i uefi och ändra varjegång jag vill köra det andra OS:et... easyBCD skulle kunna göra detta tydligen men det kostar ju tyvärr pengar... Vilket jag hade vilja slippa lägga ut någon som har ett annat förslag? tack för svar!

Av asdfgh

Tack för att du svara.

Jag har redan läst den, men då jag hatar legalt jubble mubble så tänkte jag om någon kanske vist nåt mer än mig.

Av asdfgh

mjukvara licens fråga

Hej SweC.

Jag sitter med ett projekt och har hittat ett bibliotek som har vissa funktioner som hade gjort att mycket arbete hade gått snabbare och lättare. Men jag känner mig lite osäker och tänkte kolla med er angående licenser.

Mitt projekt är har tanken att använda MIT licensen, men biblioteket jag har hittat använder sig av "boost software license version 1.0" Jag har försökt få lite tydlighet idet hela. Men kan jag nyttja boost software lisen fast mitt projekt är MIT?

Får be om ursäkt om detta eventuellt är fel forum.

Tack för svar!

Av asdfgh

Tack för alla svar! Jag tänker mig att jag får sitta och kolla in detta när jag kommer.

Av asdfgh

privat musik stream

Hej SweC!

Jag skulle vilja ha min egna musik stream det vill säga spela min musik som finns på datorn hemma till en webb sida eller där jag skulle vilja kunna söka på min musik, bygga play lists samt lyssna på den. Detta måste ju även vara så bara jag kommer åt den. Då jag inte vill bli anmäld för t,ex spridning av kopieringsskyddat material.

Tack för svar!

Av asdfgh

En vidare fråga på detta är, Finns det nåt lämpligt exception att kasta då de skrivit in en "icke godkänd" path?

Tack för svar!

Av asdfgh

Jag lyckades nu lösa detta genom att ändra regex till

/[^a-z0-9+/.test(tmp)

Av asdfgh

Javascript regex || omvänd match

Hejsan SweC.

Har lite funderingar kring regex, idag gör jag enligt:

var input = $("#userInput :input"); for(var i = 0; i < input.length; i++){ if(input[i] && 0 !== input[i].length; var tmp = input[i].value; if(tmp && (! /[a-z0-9]+/.test(tmp) || tmp.includes("-"))){ alert("You have used non-supported characters"); return; } // Do stuff... }

I koden ovan funkar allt som det ska men jag hade hoppas på att regex uttrycket skulle reagera på "-", som den reagerar på "+", "?", osv men inte just "-" av någon anledning och kan jag inte förstå varför. Så det jag söker är helt enkelt att på något sätt säga till att vi inte stödjer "-" utan att använda "tmp.includes("-")". Är det någon som förstår varför regex uttrycket är fel och kanske kan ge förslag på hur det kan bättras?

Tack för svar!

P.S: Om det är syntax error eller nåt i koden ovan är för att jag har fri handat den nu bara för att visa på ett ungefär hur koden ser ut utan att faktiskt posta den.

Av asdfgh

så det @Leedow menar är då:

public bool isPathCurrentDirOrSubDir(string newUserPath) { var currentPath = Settings.User.CurrentPath; // "/home/users/test/"; var newPath = cleanUpPath(newUserPath); if (newPath.BeginsWith(currentPath)) { return true; } else { return false; } } public void test(){ string curent = Directory.GetCurrentDirectory(); string usrPath = getUserPath(); string path = Path.combine(current, usrPath); if(!isPathCurrentDirOrSubDir(Path.GetFullPath(path)){ return; } // do stuff }

Ja, det känns som att det borde fungera för då. Då om jag inte missar nåt så ska getfullpath ta t,ex c:/path/to/current/../../Other/ =>c:/path/ other.

Klockrent tackar!

Av asdfgh

Path.Combine var ju intressant också. Example:

string path = Directory.GetCurrentDirectory(); string userSetPath = "c:\Windows\System32\ftp.exe"; string openPath = Path.Combine(path, userSetPath); // result openPath="c:\Windows\System32\ftp.exe"

Annat är ju:

string path = Directory.GetCurrentDirectory(); // let's say c:\User\projektUser\project\Folder string userSetPath = "..\..\..\Path\outside\parent\file.txt"; string openPath = Path.Combine(path, userSetPath); // result openPath="c:\User\Path\outside\parent\file.txt"

Av asdfgh

path frågor c# || tilllåt under mappar och filer men ej föräldrar mappar.

Hejsan Swec.

I programmet ska en användare kunna läsa filer på en server. Men jag vill begränsa användaren så den kan bara läsa filer i current directory eller sub directory. Dock ska användaren inte få läsa filer som ligger utanför current directory. Hitintills har jag inte hitta nå bra sätt att göra detta på. Det ända jag har kommit fram till är att försöka parsa bort alla directory "tecken" från stringen men det känns så om ständigt måste finnas nå bättre tänker jag.

Har någon nåt förslag?

Tack för svar!b

Av asdfgh

Ja, det där scriptet var bra tycker jag.

Av asdfgh

Webbplats || JavaScript: läsa av höjd/bred ratio vid uppladdning av SVG filer.

Hej SweC!

Så jag har en sida där användare kan ladda upp svg filer, ett problem som uppstår är då att om bilden är har en "hög" height/width ratio så när denna svg:n presenteras så baseras "storleken" på den uppladdade bilden på att den ska på bredden få plats vilket gör att om den är för "hög" jämfört med bredden så får vi att den blir väldigt "fult" presenterat. Vi har hittat lite olika sätt på hur man skulle kunna skala om svg:n för att passa men vi gillar ingen av dessa metoder än så länge. Så det vi skulle vilja göra tillsvidare är att varna användaren vid uppladdning att bilden höjd/bredd ratio kommer skapa presentations problem, så får de välja om de fortfarande vill ladda upp den.

Så jag har en idé (dock gillar jag inte den) och det är att göra ett element i DOM med svg:n som döljs och läsa dennes höjd/bredd för att avgöra om vi vill ge varningen eller ej.

Slutligen till min fråga, är det någon där ute som vet om man på något sätt kan läsa ut höjd/bredd ration på SVG:n via filen utan att ha ett element i DOM?

Tack för svar!

Av asdfgh

Tack för alla tips. Jag har tyvärr lagt uppsättning av bygg server på hyllan lite då vi fått in annat som prioriteras.

Men jag återkommer kanske när det blir dags igen.

Av asdfgh

bygg/deploy server || C# || Azure

Hej SweC.

Jag tänkte kolla om det är någon som har ett tips på en bygg/deploy server för C# kod till azure. Vår Azure struktur ser ut som följande: develop server, test server och prod server.

Önskemålet är att när vi merge:ar kod till vår git (master) så ska den byggas och läggas in i vår development server sedan finnas möjlighet att föra över till test server om vi känner oss mogna och till sist till prod. Då vi är relativt "nya" i detta skulle vi uppskatta att den är lätt att sätta upp och använda.

Är det någon av er som har bra tips på ett sådant system/server?

P.S moderator kan flytta tråden till passande forum om detta är fel.

Tack för svar!
m.v.h.
asdfgh

Av asdfgh

visual studio || minnesallokering c++ || teori inte direkt praktik

Hejsan SweC.

Så jag sitter med visual studio 2010 professional, kollar egenom en bit kod som inte kan dela med mig av tyvärr. Men konceptuellt ser den ut så här:

void funk(/*args...*/){ char* p_mem = new char[256]; /* ... some code.... */ delete p_mem; }

Nu vet jag inte hur noga ni kollade på koden men det som står är ju new[] och delete. För någon anledning så säger inte visual studio till (jag är väldigt ny i visual studio världen använder vanligen clang/gcc) jag är rätt säker (ska inte svära på det) att i gcc och clang hade du aldrig gått göra det utan ett error eller två, men detta program går att göra och får inte ens klagomål på den där. Enligt standard ska det se ut så här:

voi funk(/*args...*/){ char* p_mem = new char[256]; /* ... some code.... */ delete[] p_mem; }

Så till mina frågor:
Hur löser visual studio att man allokera array men delete vanlig mem yta?
Löser visual studio det hela själv i backgrunden? eller är det en källa till minnes läcka?

Tack för svar!